Эффективный способ удалить значение ключа из массива массивов - PullRequest
0 голосов
/ 13 марта 2019

У меня есть массив из 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;

Есть мысли?

Ответы [ 2 ]

3 голосов
/ 13 марта 2019

Это создает копию подмассива, поэтому при его изменении основной массив не изменяется:

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 голос
/ 13 марта 2019

Нет причин, по которым я могу придумать, чтобы удалить его (просто проигнорировать его), однако вы можете запустить его через обратный вызов, который удаляет id и возвращает остальное:

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