我需要帮助才能更改数组的索引。
我有这个数组:
$items = array('items' => array(
0 => array(
'item_id' => 1,
'item_amount' => 100,
),
1 => array(),
));
现在我想根据item_id
的值删除索引,但我不知道如何执行此操作。
我试图按照以下方式进行,但不起作用。
foreach($items['items'] as $key) {
$removeIndex = $key['item_id'] == 1;
if($removeIndex) {
unset($removeIndex);
}
}
我该怎么做?
答案 0 :(得分:3)
你需要像这样使用unset
:
foreach($items['items'] as $index => $key) { // also get the index!
if (!isset($key['item_id'])) continue; // skip
$removeIndex = $key['item_id'] == 1;
if($removeIndex) {
unset($items['items'][$index]['item_id']); // specify path to that entry
}
}
在eval.in上看到它。
要在嵌套数组结构中取消设置某些内容,您需要对该数组本身进行操作。 unset($removeIndex)
不会更改数组,因为这是一个布尔值。
当你在某个子数组中没有if
时会出现额外的item_id
:在这种情况下,会跳过循环的迭代。
如果你的目标是删除item_id
所属的子阵列(包括item_amount
和该子阵列中的任何其他值),那么只需缩短“路径”在unset
声明中:
foreach($items['items'] as $index => $key) { // also get the index!
if (!isset($key['item_id'])) continue; // skip
$removeIndex = $key['item_id'] == 1;
if($removeIndex) {
unset($items['items'][$index]); // specify path to that entry
}
}
在eval.in上看到它。
答案 1 :(得分:0)
如果要删除'item_id'
数组中的特定条目$items
,则必须引用它并使用这两个键,如:
foreach($items['items'] as $key => $val) {
if (!isset($val['item_id'])) continue;
$removeIndex = $val['item_id'] == 1;
if($removeIndex)
unset($items['items'][$key]);
}
如果你是downvote,请说明你认为这个答案不合适的原因。
答案 2 :(得分:0)
您需要致电unset($items['items'][0])
。对于你的情况,它将是这样的:
$id = 1;
$keyToRemove = false;
foreach ($items['items'] as $key => $value) {
if ($value['item_id'] == $id) {
$keyToRemove = $key;
break;
};
}
if ($keyToRemove) {
unset($items['items'][$keyToRemove]);
}