PHPは2次元配列の中のあるkeyの集合を取得する

1821 ワード

本文はコードのために分かち合って、仕事の中でいくつかの“牛”のコードを見て、分かち合いをします.
具体的には,次の2次元配列がライブラリから読み出される.
コードリスト:
$user = array(
    0 => array(
        'id'    => 1,
        'name'  => '  ',
        'email' => '[email protected]',
    ),
    1 => array(
        'id'    => 2,
        'name'  => '  ',
        'email' => '[email protected]',
    ),
    2 => array(
        'id'    => 5,
        'name'  => '  ',
        'email' => '[email protected]',
    ),
    ......
);

上の配列フォーマットは、主にPHP+MYSQLで遊んだことがあるので、よく知っているに違いありません.
では、このような2つのニーズがあります.
1)インデックス「id」の集合を取得し,1つの配列として保存するarray(1,2,5)を得る.
皆さんはどう書きますか?
以前の私の書き方なら直接foreach、そしてarray_pushは一つ一つ配列変数に詰まっている.これも実現できます.しかし、このような書き方は性能に影響を与える.PHP原生の関数を使うと循環効率より高いに違いないからだ.
コードリスト:
$ids = array();
$ids = array_map('array_shift', $user);

上記のコードで私たちが望む結果が得られますが、関数の使用についてはマニュアルを見たいです.
実はarrayを使う案もありますcolumn関数ですが、この関数にはPHPバージョンの要件が必要です(PHP 5>=5.5.0)
コードリスト:
$ids = array();
$ids = array_column($user, 'id');

そうすれば、効率はきっともっと高くなるに違いない.
2)インデックス「name」の集合を取得し,array('張三','李四','王五')を得る1つの配列として保存する.
私の従来の書き方では、同じforeachでarray_pushは一つ一つ配列変数に詰まっている.効率的なコードリストを見てください.
コードリスト:
$names = array();
$names = array_reduce($user, create_function('$v,$w', '$v[$w["id"]]=$w["name"];return $v;'));

結果:
array(
    1 => '  ',
    2 => '  ',
    5 => '  ',
);

いつもforeachの子供靴、早く訂正しましょう!
本文はCSDNから来て、転載して出典を明記してください!http://blog.csdn.net/liruxing1715/article/details/22925575