PHP 7 - 如何搜索数组的多个特定成员

Eri*_*der 4 php arrays

我有一个PHP数组,如下所示:

array (size=3)
  'CA,Santa Barbara' => 
    array (size=2)
      'state' => string 'CA' (length=2)
      'city' => string 'Santa Barbara' (length=13)
  'KS,Andover' => 
    array (size=2)
      'state' => string 'KS' (length=2)
      'city' => string 'Andover' (length=7)
  'KS,Wichita' => 
    array (size=2)
      'state' => string 'KS' (length=2)
      'city' => string 'Wichita' (length=7)
Run Code Online (Sandbox Code Playgroud)

我需要返回所有具有值的数组成员:

state => 'KS'
Run Code Online (Sandbox Code Playgroud)

我需要得到一个看起来像这样的数组:

array (size=2)
  'KS,Andover' => 
    array (size=2)
      'state' => string 'KS' (length=2)
      'city' => string 'Andover' (length=7)
  'KS,Wichita' => 
    array (size=2)
      'state' => string 'KS' (length=2)
      'city' => string 'Wichita' (length=7)
Run Code Online (Sandbox Code Playgroud)

是否有PHP数组函数执行此操作?我找到了array_search(),但只返回第一个匹配.我需要所有比赛.

Sys*_*all 9

您可以使用array_filter()删除所有不需要的值:

$array = array (
    'CA,Santa Barbara' => array (
        'state' =>  'CA' ,
        'city' =>  'Santa Barbara' ,
    ),
    'KS,Andover' => array (
        'state' =>  'KS' ,
        'city' =>  'Andover' ,
    ),
    'KS,Wichita' => array (
        'state' =>  'KS' ,
        'city' =>  'Wichita' ,
    ),
);
// keep all values with state is "KS":
$out = array_filter($array, function($v) {
    return $v['state'] == 'KS';
});

print_r($out);
Run Code Online (Sandbox Code Playgroud)

输出:

Array(
    [KS,Andover] => Array(
            [state] => KS
            [city] => Andover
        )
    [KS,Wichita] => Array(
            [state] => KS
            [city] => Wichita
        )
)
Run Code Online (Sandbox Code Playgroud)

要在匿名函数中使用另一个变量,可以使用use()以下命令传递它:

$state = 'KS';
$out = array_filter($array, function($v) use ($state) {
    return $v['state'] == $state;
});
Run Code Online (Sandbox Code Playgroud)