搜索数组&返回所有键和值

时间:2013-06-07 10:02:35

标签: php arrays

我正在研究类似的数组:

$users = array(    
    array( 'name' => "John", 'lastname' => 'doe'),
    array( 'name' => "smith", 'lastname' => 'Jones'),
);

我想通过“名字”和数字搜索数组。返回其“姓氏”

示例:我有“john”这个名字&在搜索数组时我想要“Doe”作为返回值。

我尝试了以下功能,但

function my_function( $array, $name ) {
        foreach( $array as $name ) {
            .....
        }
}

my_function($users, 'John');

但是我得到“为foreach()提供的无效参数”错误。

这样做的正确方法是什么?

3 个答案:

答案 0 :(得分:0)

function my_function( $array, $name, $haystackkey, $returnkey) {

    foreach( $array as $key => $item ) {
        if (isset($item[$haystackkey]) && $item[$haystackkey] == $name) {
            return $item[$returnkey];
        }            
    }

}

呼叫

my_function ($array, 'John', 'name', 'lastname');

这将在$ array中搜索'name'为'John'的元素,并返回值og'lastname'。当然,如果不在其他环境中使用,您可以对最后2个参数进行硬编码。

小心,这只会返回首次出现。要获取列表或结果,请将return替换为$result[]=...

答案 1 :(得分:0)

Yay for array reduction。不是最有效的方法,但很酷。

$found = array_reduce($users, function ($found, array $candidate) use ($name) {
    return $found ?: ($candidate['name'] == $name ? $candidate['lastname'] : null);
});

答案 2 :(得分:0)

问题是$ name的重复使用

使用以下代码,当输入为“John”时,我会得到“doe”

$users = array(    
    array( 'name' => "John", 'lastname' => 'doe'),
    array( 'name' => "smith", 'lastname' => 'Jones'),
);

function my_function( $array, $name ) {
  foreach( $array as $row ) {
      if($row['name'] == $name) {
        return $row['lastname'];
      }
  }
}

echo my_function($users, 'John');