Php 在对象foreach循环中将结果限制为1,in_数组不起作用

Php 在对象foreach循环中将结果限制为1,in_数组不起作用,php,object,break,strpos,Php,Object,Break,Strpos,我有一个城市列表,这些城市可能存在一次或多次,或者根本不存在 使用php,我想检查city是否在foreach中,如果存在,则只打印一个输入 下面的工作非常完美,仅当存在时打印城市,但重复现有的: **Updated (added afterwards):** $paradasarray= array(); $xml = new SimpleXMLElement($viajes); foreach ($xml->parada as $excursion) { $paradas

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

使用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>';
    }
}
**已更新(随后添加):**
$paradasarray=array();
$xml=新的simplexmlement($viajes);
foreach($xml->parada as$touring){
$paradaObject=new stdClass();
$paradasObject->localidad=$Tourition->localidad;
$paradaObject->localidad=str_replace('/','',
$paradasObject->localidad);$paradasarray[]=$paradasObject;
} 
$paradasarray=json_encode($paradasarray)$天堂阵列=
json_解码($paradasarray);
**结束更新**
foreach($paradasarray作为$parada){
if(strpos($parada->localidad,'Benalmádena')!==false){
echo“Benalmádena Costa”;
}
if(strpos($parada->localidad,'Estepona')!==false){
回音“Estepona”;
}
}
我尝试过休息,但是,或者我只得到两个城市中的一个,而我应该得到两个,或者没有一个。

简单地说

$cities = [];

foreach ($paradasarray as $parada) {
    // If the current city is not in our array i.e. if it hasn't been printed
    if (!in_array($parada->localidad, $cities)) {
         // print then push
         array_push($parada->localidad, $cities);
    }
}
这样,您就可以跟踪所有已打印的城市

然而,我实际上会在查询级别(如果涉及查询)对其进行修改,并从中过滤它们

阅读材料


您需要从数组中删除重复值,因此使用
array\u column()
获取数组的
localidad
列,并使用
array\u unique()从中删除重复值。

所以你的代码应该改成

$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>';
}
然后像这样删除循环后的重复值

$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>';
}
foreach($newParadasarray作为$parada){
if(strpos($parada,'Benalmádena')!=false)
echo“Benalmádena Costa”;
if(strpos($parada,'Estepona')!==false)
回音“Estepona”;
}

当存储两个不同的匹配项时,您可以编写一个
中断
条件。声明
$result
数组键的好处在于,如果遇到重复的限定值,它将覆盖“group”元素,而不是生成新元素

代码:()

$paradasarray=[
(object)['localidad'=>'Estepona whatever'],
(对象)['localidad'=>'something Benalmádena'],
(对象)['localidad'=>'Benalmádena foo'],
(对象)['localidad'=>'Estepona bar']
];
$result=[];
foreach($paradasarray作为$i=>$parada){
if(strpos($parada->localidad,'Benalmádena')!==false){
$result['Benalmádena']=“Benalmádena Costa”;
}elseif(strpos($parada->localidad,'Estepona')!==false){
$result['Estepona']='Estepona';
}
如果(计数($result)=2){
打破
}
}
//如果与文本匹配,则不需要声明value属性
回声“;
回波“”,内爆(“,$result)”;
回声“;
无论匹配多少个元素,您都将获得:

0:选择中的空
标记。
1:选择中的单个填充选项

2:选择

中的两个填充选项都使用
array\u unique
我们可以看看您的示例输入是什么样子吗?您使用的是
strpos()
,因为您需要对元素值执行部分匹配吗?不起作用,也许我应该发布完整的代码。它来自xml。在foreach之前:$paradasarray=array()$xml=新的simplexmlement($viajes);foreach($xml->parada as$siftion){$paradasObject=new stdClass();$paradasObject->localidad=$siftion->localidad;$paradasObject->localidad=str_replace('/','',$paradasObject->localidad);$paradasarray[]=$paradasObject}$paradasarray=json_encode($paradasarray)$paradasarray=json_decode($paradasarray)@Helenp请在问题中填写所有问题的详细信息。这样,整个故事都在一个可预测的位置,为每个人提供方便。谢谢,这工作非常完美,但是重新排序输入。现在我需要订购alfabethically@Helenp这就是如何实现
中断
并高效执行的方法。
$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>';
}
$paradasarray = [
    (object)['localidad' => 'Estepona whatever'],
    (object)['localidad' => 'something Benalmádena'],
    (object)['localidad' => 'Benalmádena foo'],
    (object)['localidad' => 'Estepona bar']
];

$result = [];
foreach ($paradasarray as $i => $parada) {
    if (strpos($parada->localidad, 'Benalmádena') !== false) {
        $result['Benalmádena'] = "Benalmádena Costa";
    } elseif (strpos($parada->localidad, 'Estepona') !== false) {
        $result['Estepona'] = 'Estepona';
    }
    if (count($result) == 2) {
        break;
    }
}

// you don't need to declare a value attribute if it matches the text
echo "<select>";
    echo "<option>" , implode("</option><option>", $result) , "</option>";
echo "</select>";