如果statement == true,则从数组中删除前一个元素

时间:2013-05-21 16:55:22

标签: php arrays foreach

我有一个循环遍历数组的foreach循环,但是我想检查数组是否包含$ item =='survey-east-upper',如果这是真的,那么隐藏前面的$ item,即'survey-east' 。我查看了in_array,但无法想出如何删除前一个元素。

我的原始代码:

foreach ($survey_array->Services as $service) {
  foreach ($service as $item) {
    echo '<li title="' . rtrim($item) . '" class="' . strtolower(preg_replace('/[^a-zA-Z0-9]/', '-', rtrim($item))) . '">' . $item . '</li>';
    }
  }

新代码:

foreach ($survey_array->Services as $service) {
  foreach ($service as $item) {
    if (in_array("survey-east-upper", $survey_array->Services)) {
       unset($site->Services['survey-east']);
    }
    echo '<li title="' . rtrim($item) . '" class="' . strtolower(preg_replace('/[^a-zA-Z0-9]/', '-', rtrim($item))) . '">' . $item . '</li>';
    }
  }

我该如何做到这一点?

1 个答案:

答案 0 :(得分:2)

不要使用foreach,用于索引。在每次迭代中,提前查看一个项目并检查该项目。如果是“Survey-east-upper”,则跳过实际迭代并继续进行。

foreach ($survey_array->Services as $service) {
  for ($i = 0; $i < count($service) - 1; $i++) {
    $item = $service[$i];
    if ($service[$i + 1] == "survey-east-upper") {
         continue;
    }
    echo '<li title="' . rtrim($item) . '" class="' . strtolower(preg_replace('/[^a-zA-Z0-9]/', '-', rtrim($item))) . '">' . $item . '</li>';
    }

  }

修改

您必须对数组$service[count($service) - 1]中的最后一项执行某些操作,因为它不会包含在for循环中