if statement == true 从数组中删除前一个元素
Posted
技术标签:
【中文标题】if statement == true 从数组中删除前一个元素【英文标题】:Remove previous element from array if statement == true 【发布时间】:2013-05-16 12:59:42 【问题描述】:我有一个遍历数组的 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>';
我怎样才能做到这一点?
【问题讨论】:
一个不是简单地删除循环。 (您是否尝试过使用 break; 来逃避循环)?$site->Services
包含什么?您可以发布其内容的转储吗?
我会看看休息时间。那么这是错误的做法吗?***.com/questions/2304570/…
我不建议在迭代过程中编辑带有未设置 od 的数组...它会产生令人困惑的代码和奇怪的行为。
对不起,乔治不是$survey_array->Services
,而不是$site->Services
。我知道没有帮助,但我会纠正这个问题。 stdClass Object ( [SurveyArray] => Array ( [0] => stdClass Object ( [ServiceName] => SurveyEast ) [1] => stdClass Object ( [ServiceName] => SurveyEastUpper ) ) )
【参考方案1】:
不要使用 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 循环中
【讨论】:
以上是关于if statement == true 从数组中删除前一个元素的主要内容,如果未能解决你的问题,请参考以下文章
while之后if出现unreachable statement