iT邦幫忙

9

PHP連載 5

php

今天看到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


2 則留言

0
老鷹(eagle)
iT邦高手 1 級 ‧ 2013-12-27 14:38:33

讚!超級實用的函數讚
簽名簽名謝謝謝謝灑花灑花

總裁 iT邦好手 1 級 ‧ 2013-12-27 14:52:01 檢舉

有大公加持,老鷹可以飛得更高更遠了!!!...讚

cdfu提到:
有大公加持,老鷹可以飛得更高更遠了

少了兩個特性
有大公加持,可以飛天遁地 潛水路跑汗

0
weiclin
iT邦高手 4 級 ‧ 2013-12-27 15:17:09

還沒用到那麼新的版本
來玩一下 php 5.3 手工模擬 xD

&lt;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'  
));

輸出結果:

&lt;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
)

又發現一個高手讚
一起來連載吧!!XD
推廣PHP開心

zuyan iT邦好手 1 級 ‧ 2013-12-27 21:16:45 檢舉

讚讚讚.....
這次真的要好好把PHP學起來了

我要留言

立即登入留言