Php array_diff()问题

时间:2014-02-15 23:50:51

标签: php

我在这里看到了一些类似的问题,但无法解决我的问题。

我使用array_diff函数来获取两个数组的差异,但它不起作用。这是我的代码。

$remainings = array_diff($quals,$assigned);
for($i=0;$i<count($quals);$i++)
  echo $quals[$i].'-';
echo count($quals);
echo "<br>";
for($i=0;$i<count($assigned);$i++)
  echo $assigned[$i].'-';
echo count($assigned);  
echo "<br>";  
for($i=0;$i<count($remainings);$i++)
  echo $remainings[$i].'-';
echo count($remainings);

这是我得到的结果:

TeamA-TeamB-TeamC-TeamD-TeamE-TeamF-TeamG-TeamH-TeamI-TeamJ-TeamK-TeamL-12

- TeamE-TeamF --- TeamD-TeamH ---- TeamG-12

TeamA-TeamB-TeamC ----- 7

我在最后一行的期望是:

TeamA-TeamB-TeamC-TeamI-TeamJ-TeamK-TeamL-7

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

你得到的是因为array_diff保留了第一个数组的原始密钥

所以你的$remainings数组看起来像这样

Array ( 
   [0] => TeamA 
   [1] => TeamB 
   [2] => TeamC 
   [8] => TeamI 
   [9] => TeamJ 
   [10] => TeamK 
   [11] => TeamL 
)

注意团队名称后半部分的8,9,10,11个索引

所以当你进行for循环时你的索引从0到7,并且因为没有3,4,5,6索引没有打印任何东西(如果你有你的E_NOTICE未定义索引错误有display_errors)

所以不要使用常规for循环使用foreach循环

foreach($remainings as $team)
  echo $team.'-';
echo count($remainings);

将输出: TeamA-TeamB-TeamC-TeamI-TeamJ-TeamK-TeamL-7

PHPFiddle Demo(点按“运行”按钮)

As Niet the Dark Absol提到你也可以使用array_values来“重置”键 只需执行以下操作:

$remainings = array_values( array_diff($quals,$assigned) );
  

http://php.net/array-values

     

array_values()返回来自的所有值   数组和数组索引数组。