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');

これは、'name' が 'John' である要素を $array で検索し、値 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 に答える