比如说,您只是查询了一个数据库,并收到了这个2D数组.
$results = array( array('id' => 1, 'name' => 'red' , 'spin' => 1), array('id' => 2, 'name' => 'green', 'spin' => -1), array('id' => 3, 'name' => 'blue' , 'spin' => .5) );
我经常发现自己写这样的循环.
foreach($results as $result) $names[] = $result['name'];
我的问题是,有没有办法在不使用循环的情况下获取此数组$名称?使用回调函数计为使用循环.
以下是获取每个字段的更一般示例.
foreach($results as $result) foreach($result as $key => $value) $fields[$key][] = $value;
Salvador Dal.. 23
截至6月20日,在PHP-5.5中有一个新函数array_column
例如:
$records = array( array( 'id' => 2135, 'first_name' => 'John', 'last_name' => 'Doe' ), array( 'id' => 3245, 'first_name' => 'Sally', 'last_name' => 'Smith' ), array( 'id' => 5342, 'first_name' => 'Jane', 'last_name' => 'Jones' ), array( 'id' => 5623, 'first_name' => 'Peter', 'last_name' => 'Doe' ) ); $firstNames = array_column($records, 'first_name'); print_r($firstNames);
将返回
Array ( [0] => John [1] => Sally [2] => Jane [3] => Peter )
在上面提到的链接中有更多的例子.
截至6月20日,在PHP-5.5中有一个新函数array_column
例如:
$records = array( array( 'id' => 2135, 'first_name' => 'John', 'last_name' => 'Doe' ), array( 'id' => 3245, 'first_name' => 'Sally', 'last_name' => 'Smith' ), array( 'id' => 5342, 'first_name' => 'Jane', 'last_name' => 'Jones' ), array( 'id' => 5623, 'first_name' => 'Peter', 'last_name' => 'Doe' ) ); $firstNames = array_column($records, 'first_name'); print_r($firstNames);
将返回
Array ( [0] => John [1] => Sally [2] => Jane [3] => Peter )
在上面提到的链接中有更多的例子.
我投了@Devon的回复,因为实际上没有办法用内置函数做你所要求的.你能做的最好就是写自己的:
function array_column($array, $column) { $ret = array(); foreach ($array as $row) $ret[] = $row[$column]; return $ret; }
从PHP 5.3开始,你可以使用lambda函数调用这个漂亮的调用:
$names = array_map(function ($v){ return $v['name']; }, $results);
这将返回按"名称"维度切片的数组.
简单地说,不.
您将需要使用循环或回调函数,如array_walk.