首页 > 解决方案 > 在对象 foreach 循环中将结果限制为一个,in_array 不起作用

问题描述

我有一个城市列表,这些城市可能存在一次或重复多次,也可能根本不存在。

使用 php 我想检查 city 是否在 foreach 中,如果存在则只打印一个输入。

以下工作完美,仅在存在时打印城市,但重复现有:

  **Updated (added afterwards):**
$paradasarray= array(); 
$xml = new SimpleXMLElement($viajes); 
foreach ($xml->parada as $excursion) { 
  $paradasObject = new stdClass(); 
  $paradasObject->localidad = $excursion->localidad; 
  $paradasObject->localidad = str_replace('/<![CDATA[(.*)]]>/', '', 
  $paradasObject->localidad); $paradasarray[] = $paradasObject; 
} 
$paradasarray = json_encode($paradasarray); $paradasarray = 
json_decode($paradasarray); 

     **end updated**


foreach ($paradasarray as $parada) {
    if (strpos($parada->localidad, 'Benalmádena') !== false) {
        echo '<option value="Benalmádena Costa">Benalmádena Costa</option>';
    }
    if (strpos($parada->localidad, 'Estepona') !== false) {
        echo '<option value="Estepona">Estepona</option>';
    }
}

我尝试过休息,但是当我应该得到两个城市时,我只得到两个城市之一,或者一个都没有。

标签: phpobjectbreakstrpos

解决方案


您需要从数组中删除重复值,因此使用获取localidad数组列array_column()并从中删除重复值array_unique()

$newParadasarray = array_unique(array_column($paradasarray, "localidad"));

所以你的代码应该改为

$newParadasarray = array_unique(array_column($paradasarray, "localidad"));
foreach ($newParadasarray as $parada) {
    if (strpos($parada, 'Benalmádena') !== false)
        echo '<option value="Benalmádena Costa">Benalmádena Costa</option>';

    if (strpos($parada, 'Estepona') !== false)
        echo '<option value="Estepona">Estepona</option>';
}

在演示中检查结果


更新:

localidad我看到了您的完整代码,因此您可以创建一个仅包含值的数组。并使用array_unique. 仅将底部代码添加到您的第一个循环(xml 循环)。

@$newParadasarray[] = $excursion->localidad;

并在这样的循环后删除重复值

$newParadasarray = array_unique($newParadasarray);

并通过数组循环打印选项

foreach ($newParadasarray as $parada) {
    if (strpos($parada, 'Benalmádena') !== false)
        echo '<option value="Benalmádena Costa">Benalmádena Costa</option>';

    if (strpos($parada, 'Estepona') !== false)
        echo '<option value="Estepona">Estepona</option>';
}

推荐阅读