从数组数组中删除键值的有效方法
Posted
技术标签:
【中文标题】从数组数组中删除键值的有效方法【英文标题】:Efficient way to remove key-value from Array of Arrays 【发布时间】:2019-08-04 08:32:19 【问题描述】:我有一个包含 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 元素的数组;
有什么想法吗?
【问题讨论】:
两个问题 - 为什么会出现,为什么要删除它? 我宁愿不循环遍历 50k 个元素,要么你必须这样做,要么你可能调用的 php 内置函数将不得不这样做 最好先看看你是如何构建这个数组的,然后不要一开始就添加id
@kuh-chan - id 来自我从中获取数据的在线服务器 - 我需要它将 fetchData 分成多个部分。我正在尝试删除它,因为我的 localDB 已经有一个自动增量 ID
仅仅因为您使用它来分隔数据并不意味着您必须将其添加到结果数据中
【参考方案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 &$sd)
unset($sd['id']);
或者,更简洁:
array_walk($server_data, function (&$item) unset($item['id']); );
【讨论】:
【参考方案2】:我没有理由想删除它(只是忽略它),但是您可以通过删除 id
并返回其余部分的回调来运行它:
$server_data = array_map(function($v) unset($v['id']); return $v; , $server_data);
【讨论】:
以上是关于从数组数组中删除键值的有效方法的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript:检查对象数组中是不是存在重复的键值并删除所有但最近添加的具有该键值的对象