PHP: 在一个数组的数组中搜索第一个 "column" 的内容

10 浏览
0 Comments

PHP: 在一个数组的数组中搜索第一个 "column" 的内容

我有一个二维数组,我想要复制第一列。

数据看起来像这样:

(0 => "homer",   1 =>  1,   2 =>  2,   3 =>  3)
(0 => "marge",   1 =>  2,   2 =>  4,   3 =>  8)
(0 => "bart",    1 =>  6,   2 =>  2,   3 =>  7)
(0 => "lisa",    1 => 16,   2 => 20,   3 => 71)

是否有一个类似于array_search的PHP函数,我可以用它来在第一列中搜索匹配的项?

第一列的数据已经排序过了,所以如果我能复制"column1",我可以执行一个array_search(我认为它使用的是二分搜索,而不是逐个元素迭代)。

我的问题是:

  • 是否有一个类似于array_search的PHP函数,我可以用它来在二维数组的第一列中搜索匹配的项?

  • 如果没有,是否有一个PHP函数可以将第一列复制到一个一维数组中(同时保持顺序),这样我就可以在其中调用array_search了?

0
0 Comments

PHP:在数组中搜索第一列的问题的原因是在使用array_search()函数时,当没有找到匹配项时,该函数会返回false。这将被视为0,并且将返回第一个子数组,而实际上应该返回没有子数组。解决方法是使用PHP 5.5以上版本中的新函数array_column(),结合array_keys()和array_map()函数。具体的解决方法如下:

$array=array(
    array(0=>"homer", 1=> 1, 2=> 2, 3=> 3),
    array(0 => "marge", 1=> 2, 2 => 4, 3=> 8),
    array(0 => "bart", 1 => 6, 2 => 2, 3 => 7),
    array(0 => "lisa", 1 => 16, 2 => 20, 3 => 71)
);
$result = $array[array_search("bart",array_column($array, 0))];
print_r($result);
/* Output:
    Array
    (
        [0] => bart
        [1] => 6
        [2] => 2
        [3] => 7
    )
*/

以上就是解决该问题的代码,通过使用array_search()函数和array_column()函数,可以在多维数组中搜索第一列的特定值,并返回该子数组。这样就可以找到包含特定值的子数组,并输出结果。这种方法避免了array_search()函数返回false时的问题,确保了返回正确的子数组。

0
0 Comments

问题出现的原因是要在一个二维数组中搜索第一列的特定值。解决方法可以用array_map和create_function函数来实现,也可以使用foreach循环来逐个检查数组的每一行。以下是具体的解决方法:

使用array_map和create_function函数:

$oneDarray = array_map(create_function('$a', 'return $a[0];'), $twoDarray);

使用foreach循环:

foreach ($twoDarray as $values) {
    if ($values[0] == 'homer') {
        // 找到了!
        break;
    }
}

0
0 Comments

在这个问题中,用户想要在一个二维数组的第一列中搜索匹配的项,类似于`array_search`函数。解决方法是使用`array_filter`函数和闭包来实现。

首先,用户可以使用以下代码:

$matchedArray = array_filter($myArray, function($x) use ($nameToSearchFor) {
    return $x[0] == $nameToSearchFor;
});

其中,`$myArray`是用户提供的二维数组,`$nameToSearchFor`是要搜索的名称。

接下来,用户提供了一个示例的二维数组`$myArray`和要搜索的名称`$nameToSearchFor`:

$myArray = array(
    array(0=>"homer", 1=> 1, 2=> 2, 3=> 3),
    array(0 => "marge", 1=> 2, 2 => 4, 3=> 8),
    array(0 => "bart", 1 => 6, 2 => 2, 3 => 7),
    array(0 => "lisa", 1 => 16, 2 => 20, 3 => 71),
);
$nameToSearchFor = "bart";

以上代码将会输出匹配的数组:

$matchedArray === array(0 => "bart", 1 => 6, 2 => 2, 3 => 7);

还有使用闭包的方法只适用于PHP 5.3.0及以上版本,而在旧版本的PHP中可以使用传统的回调函数或`create_function`函数。

在问题的后面,用户还提到了另一个问题,即是否有一个PHP函数可以将二维数组的第一列复制到一个一维数组中(保持顺序),以便可以调用`array_search`函数进行搜索。对于这个问题,作者建议查看`deceze`提供的第一个选项,而不是重复回答。

总结起来,通过使用`array_filter`函数和闭包,用户可以在二维数组的第一列中搜索匹配的项。如果需要将第一列复制到一维数组中以进行搜索,可以查看其他答案中提到的方法。

0