从数组中删除键值的有效方法

时间:2019-03-13 15:34:57

标签: php arrays unset array-unset

我有一个50000个数组,我想从每个数组中删除“ id”键值对。

我宁愿不遍历5万个元素,并且想知道是否存在一种有效的方法。

.sample

我尝试了以下两种方法,但似乎没有用:

Array
(
    [0] => Array
        (
            [id] => 713061
            [market] => usd-btc
            [price] => 3893.69
        )

    [1] => Array
        (
            [id] => 713056
            [market] => usd-btc
            [price] => 3893.69
        )

    [2] => Array
        (
            [id] => 713051
            [market] => usd-btc
            [price] => 3893.69
        )

    [3] => Array
        (
            [id] => 713046
            [market] => usd-btc
            [price] => 3893.69
        )

    [4] => Array
        (
            [id] => 713041
            [market] => usd-btc
            [price] => 3892.95
        )

    [5] => Array
        (
            [id] => 713036
            [market] => usd-btc
            [price] => 3892.95
        )

$ server_data仍返回带有$ id元素的数组;

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

这将创建子数组的副本,因此当您对其进行更改时,主数组不会受到影响:

foreach ($server_data as $sd)
{
    unset($sd['id']);
}

您可以取消设置原始数组:

foreach (array_keys($server_data) as $index)
{
    unset($server_data[$index]['id']);
}

或将子数组传递给引用,以便更改原始数组:

foreach ($server_data as &$sd)
{
    unset($sd['id']);
}

或更简洁:

array_walk($server_data, function (&$item) { unset($item['id']); });

答案 1 :(得分:1)

我没有理由删除它(只是忽略它),但是您可以通过删除id并返回其余内容的回调运行它:

$server_data = array_map(function($v) { unset($v['id']); return $v; }, $server_data);