工作中經常會遇到這樣的問題。
我得到一個二維數組,但是數組當中只包含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)!