PHP:在数组数组的第一个"列"中搜索

oom*_*pah 2 php multidimensional-array

我有一个数组数组,我想复制第一列

数据如下所示:

(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)
Run Code Online (Sandbox Code Playgroud)

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

第一列中的数据已经排序,所以如果我可以复制"column1",我可以执行一个array_search(我假设使用了一个bsearch,而不是通过元素迭代的一个天真元素).

我的问题是:

  • 是否有类似于array_search的PHP函数,我可以用它来搜索2D数组第1列中的匹配项?

  • 如果失败了,是否有一个PHP函数将第一列复制到一维数组(同时保留顺序),所以我可以调用array_search吗?

xzy*_*fer 6

是否有类似于array_search的PHP函数,我可以用它来搜索2D数组第1列中的匹配项?

你可以使用array_filter

$matchedArray = array_filter($myArray, function($x) use ($nameToSearchFor) {
    return $x[0] == $nameToSearchFor;
});
Run Code Online (Sandbox Code Playgroud)

然后给出:

$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";
Run Code Online (Sandbox Code Playgroud)

会产生:

 $matchedArray === array(0 => "bart", 1 => 6, 2 => 2, 3 => 7);
Run Code Online (Sandbox Code Playgroud)

我使用了闭包,只能在PHP 5.3.0中使用,但你在旧版本的php中使用传统的回调或create_function

如果失败了,是否有一个PHP函数将第一列复制到一维数组(同时保留顺序),所以我可以调用array_search吗?

deceze的第一个选项.我认为没有必要重复一个非常好的答案.