搜索数组并返回所有匹配项的键和值

17

我希望对一个数组执行搜索,并在找到匹配项时返回所有值。我要在数组中搜索的关键字是 [name]

Array (
[0] => Array
    (
        [id] => 20120100
        [link] => www.janedoe.com
        [name] => Jane Doe
    )
[1] => Array
    (
        [id] => 20120101
        [link] => www.johndoe.com
        [name] => John Doe
    )
)

如果我搜索 John Doe ,它会返回结果。

Array
(
    [id] => 20120101
    [link] => www.johndoe.com
    [name] => John Doe
)

如果根据我的搜索内容重命名数组,是否会更容易?除了上面的数组外,我还可以生成以下数组。

Array (
[Jane Doe] => Array
    (
        [id] => 20120100
        [link] => www.janedoe.com
        [name] => Jane Doe
    )
[John Doe] => Array
    (
        [id] => 20120101
        [link] => www.johndoe.com
        [name] => John Doe
    )
)

如果您使用名称作为键,那么有重复键的风险。 - BenOfTheNorth
那么我将忽略第二个想法,仅搜索第一个数组。 - Tim
4个回答

26
$filteredArray = 
array_filter($array, function($element) use($searchFor){
  return isset($element['name']) && $element['name'] == $searchFor;
});

需要 PHP 5.3.x


1
作为一个函数:`function so9439905_filter_array($array, $field, $search) { $filtered_array = array_filter($array, function($element) use($field, $search) { return isset($element[$field]) && $element[$field] == $search; }); return $filtered_array; };`通过 so9439905_filter_array($array, 'name', 'John Doe'); 调用。 - Leander

1
我想提供一个可选的更改,以scibuff的答案为基础(该答案非常好)。如果您不是要寻找精确匹配,而是要在数组中查找字符串...
function array_search_x( $array, $name ){
    foreach( $array as $item ){
        if ( is_array( $item ) && isset( $item['name'] )){
            if (strpos($item['name'], $name) !== false) { // changed this line
                return $item;
            }
        }
    }
    return FALSE; // or whatever else you'd like
}

使用以下代码调用...

$pc_ct = array_search_x($your_array_name, 'your_string_here');

1
$array = Array (
  [0] => Array(
    [id] => 20120100,
    [link] => www.janedoe.com,
    [name] => 'Jane Doe'
  ),
  [1] => Array(
    [id] => 20120101,
    [link] => www.johndoe.com,
    [name] => 'John Doe'
  )
);
$i = 0;
$new_array = [];
foreach($array as $key => $value){
  if($value['name'] === 'John Doe'){
    $key = $value['name'].$i;
    $new_array[] = [$key => $value];
    $i ++;
  }
}
return $new_array;

1
请不要仅仅发布代码作为答案,还要提供解释您的代码是如何解决问题的。带有解释的答案通常更有帮助和更高质量,并且更有可能吸引赞同。 - Tyler2P

1
function search_array( $array, $name ){
    foreach( $array as $item ){
        if ( is_array( $item ) && isset( $item['name'] )){
            if ( $item['name'] == $name ){ // or other string comparison
                return $item;
            }
        }
    }
    return FALSE; // or whatever else you'd like
}

е·Із»ҸжңүдёҖдёӘеҶ…зҪ®еҮҪж•°array_searchпјҢhttp://docs.php.net/array_search -> иҮҙе‘Ҫй”ҷиҜҜпјҡж— жі•йҮҚж–°еЈ°жҳҺarray_search()гҖӮ - VolkerK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接