我目前正在尝试将两个阵列的数据相互比较。我的代码看起来如下所示:
foreach ($arrayOne as $one) {
$variable = $one['one'];
foreach ($arrayTwo as $two) {
if ($two == $variable) {
echo "Match!";
}
}
}
但是,它只与$arrayTwo
中的第一个元素进行比较,而不是遍历所有$arrayTwo
。为什么是这样?此外,有没有更有效的方法来完成我想要做的事情?
阵列一的SNIPPET:
array (
0 =>
array (
'paper_item_id' => 1,
'type' => 1,
'cost' => 20,
'is_member' => false,
'label' => 'Blue',
'prompt' => 'Blue',
'layer' => 1500,
),
1 =>
array (
'paper_item_id' => 2,
'type' => 1,
'cost' => 20,
'is_member' => false,
'label' => 'Green',
'prompt' => 'Green',
'layer' => 1500,
),
2 =>
array (
'paper_item_id' => 3,
'type' => 1,
'cost' => 20,
'is_member' => false,
'label' => 'Pink',
'prompt' => 'Pink',
'layer' => 1500,
),
3 =>
array (
'paper_item_id' => 4,
'type' => 1,
'cost' => 20,
'is_member' => false,
'label' => 'Black',
'prompt' => 'Black',
'layer' => 1500,
),
)
阵列二的SNIPPET:
array (
0 => 'Blue',
1 => '
Purple Bat Wings',
2 => '
Black Motorbike',
3 => '
Test Scarf',
4 => '
Black',
5 => '
Green',
6 => '
Referee Jersey',
7 => '
Stethoscope',
8 => '
Custom Hoodie',
9 => '
',
)
答案 0 :(得分:1)
array_diff
(或您的情况下为array_diff_assoc
)函数返回两个(或更多)数组中不同的值。如果返回值为空,则它们完全没有区别。
答案 1 :(得分:0)
更有效的方法是从$arrayOne
值创建关联数组:
$check = array();
foreach ($arrayOne as $one) {
$check[$one['one']] = true;
}
foreach ($arrayTwo as $two) {
if (isset($check[$two])) {
echo 'Match! <br/>';
}
}
原始代码中的实际问题是explode()
代码返回一个数组,其中$arrayTwo
中的每个元素都以换行符开头,第一个除外。但$arrayOne
中的相应值没有换行符,因此它们不匹配。您需要修复问题中未显示的explode()
代码。