0

我有一个包含 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 元素的数组;

有什么想法吗?

4

2 回答 2

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']); });
于 2019-03-13T15:41:22.140 回答
1

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

$server_data = array_map(function($v) { unset($v['id']); return $v; }, $server_data);
于 2019-03-13T15:39:48.227 回答