比较循环中的数组

时间:2014-06-01 08:25:25

标签: php arrays for-loop array-difference

我有2个不同大小的数组,在某些情况下,一个数组可以拥有比另一个数组更多的元素。但是,我总是需要使用相同的id比较数组。我需要在另一个数组中使用相同的id获取另一个值

我试过这个,但是当我在一个循环中比较两个数组时,当另一个数组中的元素多于一个时,就会出现问题,因为重复了循环和数据,并且它不起作用。

以下是我尝试的内容:

<?php
/// Actual Data Arrays ///
$data_1=array("a1-fruits","b1-apple","c1-banana","d1-chocolate","e1-pear");
$data_2=array("b1-cars","e1-eggs");
///

for ($i=0;$i<count($data_1);$i++)
{

/// Explode ID $data_1 ///
$exp_id=explode("-",$data_1[$i]);   
///

for ($h=0;$h<count($data_2);$h++)
{

/// Explode ID $data_2 ///  
$exp_id2=explode("-",$data_2[$h]);
///

if ($exp_id[0]=="".$exp_id2[0]."")
{
print "".$data_2[$h]."";
print "<br>";
}
else
{
print "".$data_1[$i]."";
print "<br>";   
}

/// 
}
///

}
?>

我想要以下值:

"a1-fruits"
"b1-cars"
"c1-banana"
"d1-chocolate"
"e1-eggs"

然而,我得到了这个(这不是我想要的):

a1-fruits
a1-fruits
b1-cars
b1-apple
c1-banana
c1-banana
d1-chocolate
d1-chocolate
e1-pear
e1-eggs

我尝试了所有我知道的东西并尝试理解我是如何做到的,因为我不明白如何比较这两个数组。另一个问题是,当一个尺寸的元素多于另一个尺寸时,比较总会产生错误。

我找到了解决这个问题并全力以赴的工作:

<?php
/// Actual Data Arrays ///
$data_1=array("a1-fruits","b1-apple","c1-banana","d1-chocolate","e1-pear");
$data_2=array("b1-cars","e1-eggs","d1-chocolate2");
///



for ($i=0;$i<count($data_1);$i++)
{
$show="bad";    
/// Explode ID $data_1 ///
$exp_id=explode("-",$data_1[$i]);   
///

for ($h=0;$h<count($data_2);$h++)
{
/// Explode ID $data_2 ///  
$exp_id2=explode("-",$data_2[$h]);
///
if ($exp_id2[0]=="".$exp_id[0]."")
{
$show="ok"; 
print "".$data_2[$h]."<br>";
}
/// 
}

if ($show=="bad")
{
print "".$data_1[$i]."";
print "<br>";
}

///

}
?>

1 个答案:

答案 0 :(得分:2)

循环问题是,您正在同时进行比较和打印。那么会发生什么:

  loop 1 : a1
    loop 2: b1 - compare
            b1 - print $exp_id[0] or $exp_id2[0]
    loop 2: e1 - compare
            e1 - print $exp_id[0] or $exp_id2[0]
  loop 1 : b1
    loop 2: b1 - compare
            b1 - print $exp_id[0] or $exp_id21[0]
    loop 2: e1 - compare
            e1 - print $exp_id[0] or $exp_id2[0]

   and so on

您会注意到,如果您向$data_2添加其他元素,则每个元素都会打印3个。您首先必须将它们存储在某个地方,然后再打印出来。

认为你必须创建两个包含键值对的新数组,然后才合并它们。如果密钥已经存在,PHP的array_merge将始终从第二个数组中获取值。然后你可以把它们放回去;

所以:

$data_1=array("a1-fruits","b1-apple","c1-banana","d1-chocolate","e1-pear");
$data_2=array("b1-cars","e1-eggs");

$tmp_1=array();
$tmp_2=array();
$result=array();

foreach($data_1 as $value){$t=explode('-',$value);$tmp_1[$t[0]]=$t[1];}
foreach($data_2 as $value){$t=explode('-',$value);$tmp_2[$t[0]]=$t[1];}

$merge=array_merge($tmp_1,$tmp_2);

foreach($merge as $key=>$value)$result[]=$key.'-'.$value;