#php #arrays #unset #array-unset
#php #массивы #сбросить значение #массив-сбросить значение
Вопрос:
У меня есть массив из 50000 массивов, и я хочу удалить пару ключ-значение «id» из каждого из них.
Я бы предпочел не перебирать 50 тысяч элементов и задавался вопросом, есть ли эффективный способ сделать это.
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;
Есть мысли?
Комментарии:
1. Два вопроса — почему это там и почему вы пытаетесь это удалить?
2. Я бы предпочел не перебирать 50k элементов ну, либо вам придется, либо встроенной функции PHP, которую вы можете вызвать, придется
3. Возможно, было бы лучше посмотреть, как вы создали этот массив, а затем просто НЕ добавлять
id
в первую очередь4. @kuh-chan — идентификатор поступает с онлайн-сервера, с которого я извлекаю данные — мне это нужно, чтобы разбить fetchData на несколько частей. Я пытаюсь удалить его, поскольку в моей LocalDB уже есть идентификатор автоматического увеличения
5. То, что вы используете его для разделения данных, не означает, что вы должны добавлять его к результирующим данным
Ответ №1:
Это создает копию подмассива, поэтому при его изменении основной массив не затрагивается:
foreach ($server_data as $sd)
{
unset($sd['id']);
}
Вы можете отменить настройку из исходного массива:
foreach (array_keys($server_data) as $index)
{
unset($server_data[$index]['id']);
}
Или передайте подмассиву ссылку, чтобы оригинал был изменен:
foreach ($server_data as amp;$sd)
{
unset($sd['id']);
}
Или, более кратко:
array_walk($server_data, function (amp;$item) { unset($item['id']); });
Ответ №2:
Я не могу придумать причин для его удаления (просто проигнорируйте его), однако вы можете запустить его через обратный вызов, который удаляет id
и возвращает остальное:
$server_data = array_map(function($v) { unset($v['id']); return $v; }, $server_data);