PHP: 在一个数组的数组中搜索第一个 "column" 的内容
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了?
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时的问题,确保了返回正确的子数组。
问题出现的原因是要在一个二维数组中搜索第一列的特定值。解决方法可以用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; } }
在这个问题中,用户想要在一个二维数组的第一列中搜索匹配的项,类似于`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`函数和闭包,用户可以在二维数组的第一列中搜索匹配的项。如果需要将第一列复制到一维数组中以进行搜索,可以查看其他答案中提到的方法。