筆記006 犀利的array_column函數

來源:互聯網
上載者:User
工作中經常會遇到這樣的問題。

我得到一個二維數組,但是數組當中只包含id和name。比如說這個數組是這樣的:

$array = array( array('id'=>a, 'name'=>'Hy369'), array('id'=>b, 'name'=>'PHP部落格'), array('id'=>c, 'name'=>'emlog'), );

有時候我們會需要通過這個數組,得到類似下面這樣的新數組:

有時候我們會需要通過這個數組,得到類似下面這樣的新數組:$newArray = array(    'Hy369',    'PHP部落格',    'emlog',);

這時候,一般就會用一個foreach進行降維了。不知道各位朋友是怎樣的,反正Hy369以前就經常這麼幹。

然而最後我發現,PHP5.5版本有了一個專門針對該需求的函數:array_column。

我們只需如此調用,即可得到我們需要的結果:

array_column($array, 'name');

這個函數還有個更加方便的功能,如果我們傳遞了第三個參數,例如:

array_column($array, 'test', 'id');

就會得到這樣的結果:

$newArray = array(    'a'=>'Hy369',     'b'=>'PHP部落格',      'c'=>'emlog',);

你們怎麼看,反正我是醉了,這個不是一般的爽啊。

不過有個問題,我剛才已經提到,這個要php5.5版本開始才會支援。

不過,人民的力量是無窮的,已經有低版本的相容方法了:

if (!function_exists('array_column')) {    function array_column($array, $column_key, $index_key = null)    {        return array_reduce($array, function ($result, $item) use ($column_key, $index_key)        {            if (null === $index_key) {                $result[] = $item[$column_key];            } else {                $result[$item[$index_key]] = $item[$column_key];            }            return $result;        }, []);    }}

不過要注意,我這裡提供的版本僅支援5.3及其以上的,因為其中的匿名函數的方式,也就是function use的方式,從5.3開始被支援,如果要相容更低的版本,網上也有對應的方法:

if (!function_exists('array_column')) {    function array_column(array $array, $columnKey, $indexKey = null)    {        $result = array();        foreach ($array as $subArray) {            if (!is_array($subArray)) {                continue;            } elseif (is_null($indexKey) && array_key_exists($columnKey, $subArray)) {                $result[] = $subArray[$columnKey];            } elseif (array_key_exists($indexKey, $subArray)) {                if (is_null($columnKey)) {                    $result[$subArray[$indexKey]] = $subArray;                } elseif (array_key_exists($columnKey, $subArray)) {                    $result[$subArray[$indexKey]] = $subArray[$columnKey];                }            }        }        return $result;    }}

這個絕對是萬能的方法了,雖然也用到了foreach,不過獨立成了一個函數,也比每次要用的時候單獨去foreach方便多了。

以上就是筆記006 犀利的array_column函數的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.