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

Efficient way to remove key-value from Array of Arrays

我有一个包含 50000 个数组的数组,我想从每个数组中删除 "id" 键值对。

我不想循环遍历 50k 个元素,想知道是否有一种有效的方法来做到这一点。

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
        )

我尝试了以下两种方法,但似乎都不起作用:

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

        unset($server_data['id']);

        PRINT_R($server_data);

$server_data 仍在返回包含 $id 元素的数组;

有什么想法吗?

我没有理由想删除它(只是忽略它),但是您可以 运行 通过删除 id 和 returns 其余部分的回调:

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

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

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']); });