1

我有一个遍历数组的 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>';
    }
  }

我怎样才能做到这一点?

4

1 回答 1

2

不要使用 foreach,使用 for 和索引。在每次迭代中,向前看一个项目并检查该项目。如果它的“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 循环中

于 2013-05-21T17:00:22.247 回答