更改数组的索引

时间:2016-07-16 16:31:30

标签: php

我需要帮助才能更改数组的索引。

我有这个数组:

$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);
  }  
}

我该怎么做?

3 个答案:

答案 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]);
}