Php 在对象foreach循环中将结果限制为1,in_数组不起作用
我有一个城市列表,这些城市可能存在一次或多次,或者根本不存在 使用php,我想检查city是否在foreach中,如果存在,则只打印一个输入 下面的工作非常完美,仅当存在时打印城市,但重复现有的: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
**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>";