当前位置:  开发笔记 > 编程语言 > 正文

在其中一个元素上切片多维PHP数组

如何解决《在其中一个元素上切片多维PHP数组》经验,为你挑选了4个好方法。

比如说,您只是查询了一个数据库,并收到了这个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
)

在上面提到的链接中有更多的例子.



1> Salvador Dal..:

截至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
)

在上面提到的链接中有更多的例子.



2> inxilpro..:

我投了@Devon的回复,因为实际上没有办法用内置函数做你所要求的.你能做的最好就是写自己的:

function array_column($array, $column)
{
    $ret = array();
    foreach ($array as $row) $ret[] = $row[$column];
    return $ret;
}


如果你在技术上不需要用PHP,那么你还没有声明`ret`.(`$ ret = array();`)

3> Alexey Petus..:

从PHP 5.3开始,你可以使用lambda函数调用这个漂亮的调用:

$names = array_map(function ($v){ return $v['name']; }, $results);

这将返回按"名称"维度切片的数组.



4> Devon..:

简单地说,不.

您将需要使用循环或回调函数,如array_walk.


这不再是真的.PHP 5.5提供了一个内置的`array_column`函数:)
推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有