0

我正在研究与此类似的数组:

$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() 提供的参数无效”错误。

什么是正确的做法?

4

3 回答 3

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[]=...

于 2013-06-07T10:05:21.457 回答
0

是的阵列减少。不是最有效的方法,但很酷。

$found = array_reduce($users, function ($found, array $candidate) use ($name) {
    return $found ?: ($candidate['name'] == $name ? $candidate['lastname'] : null);
});
于 2013-06-07T10:07:34.180 回答
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');
于 2013-06-07T10:09:11.577 回答