我在这里看到了一些类似的问题,但无法解决我的问题。
我使用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
有什么建议吗?
答案 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) );
array_values()返回来自的所有值 数组和数组索引数组。