今天看到php5.5新增的好物:array_column...
使用PDO或是mysql_fetch_assoc來取出資料庫資料時,常常會碰到一個難題,即使是只取一個欄位,取得的還是一個關聯陣列的陣列,例如:
$a = array(
array('id'=>1),
array('id'=>2),
array('id'=>3)
)
但是需要的是:
$a = array(1, 2, 3)
這樣就要用for迴圈來取值:
$b = array();
for($i=0; $i<count($a); $a++) {
$b[] = $a[$i]['id'];
}
有了array_column,一行就解決了:
$b = array_column($a, 'id');
進一步的用法,可以把陣列轉成指定欄位值為key的另一個陣列:
$a = array(
array('uid'=>'A001','name'=>'John'),
array('uid'=>'A003','name'=>'Smith'),
array('uid'=>'A004','name'=>'Tom')
);
想要把它轉成以uid為key,值為name的陣列,只要:
$b = array_column($a, 'name', 'uid');
這樣$b就是:
array(
'A001'=>'John',
'A003'=>'Smith',
'A004'=>'Tom'
);
這樣真的很省工。
雖然要PHP5.5才有這個函數可以用,之前版本的PHP可以自行安裝:https://github.com/ramsey/array_column
另外可以參考PHP手冊:http://php.net/array_column
讚!超級實用的函數
有大公加持,老鷹可以飛得更高更遠了!!!...
cdfu提到:
有大公加持,老鷹可以飛得更高更遠了
少了兩個特性
有大公加持,可以飛天遁地 潛水路跑
還沒用到那麼新的版本
來玩一下 php 5.3 手工模擬 xD
<pre class="c" name="code">
$a = array(
array('id'=>1),
array('id'=>2),
array('id'=>3)
);
$b = array_map(function ($e){return $e['id'];}, $a);
// 比較一下
print_r($b);
print_r(array(1, 2, 3));
$a = array(
array('uid'=>'A001','name'=>'John'),
array('uid'=>'A003','name'=>'Smith'),
array('uid'=>'A004','name'=>'Tom')
);
$b = array_reduce($a, function ($s,$e){$s[$e['uid']]=$e['name'];return $s;});
print_r($b);
print_r(array(
'A001'=>'John',
'A003'=>'Smith',
'A004'=>'Tom'
));
輸出結果:
<pre class="c" name="code">
Array
(
[0] => 1
[1] => 2
[2] => 3
)
Array
(
[0] => 1
[1] => 2
[2] => 3
)
Array
(
[A001] => John
[A003] => Smith
[A004] => Tom
)
Array
(
[A001] => John
[A003] => Smith
[A004] => Tom
)
又發現一個高手
一起來連載吧!!
推廣PHP
讚讚讚.....
這次真的要好好把PHP學起來了