使用foreach PHP比较两个数组的数据

时间:2013-12-24 22:18:31

标签: php arrays foreach comparison

我目前正在尝试将两个阵列的数据相互比较。我的代码看起来如下所示:

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 => '
',
)

2 个答案:

答案 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/>';
    }
}

DEMO

原始代码中的实际问题是explode()代码返回一个数组,其中$arrayTwo中的每个元素都以换行符开头,第一个除外。但$arrayOne中的相应值没有换行符,因此它们不匹配。您需要修复问题中未显示的explode()代码。