今天看到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學起來了