如何比较两个数组的差异并输出密钥,该密钥仅在一个数组中退出?

时间:2015-11-26 10:31:47

标签: php mysql arrays

我有一个由文本文件创建的数组($name_new):

foreach ($properties as $key => $row) {
     $name_new[] = $row['name'];    
}

以下是$name_new的结果:

array(2) {
  [0]=>
  string(32) "john"
  [1]=>
  string(32) "frank"
}

我从mySQL数据库创建的另一个数组:

$sql = "SELECT * FROM data;                 
$p = $pdo->prepare($sql);
$p->execute();

foreach ($pdo->query($sql) as $row) {
    $name_orig[] = $row['name'];
}

以下是$name_orig的结果:

array(2) {
  [0]=>
  string(32) "john"
  [1]=>
  string(32) "sam"
}

我正在比较这两个数组:

if ($name_new != $name_orig) {
   $name_result = array_diff_assoc($name_orig, $name_new);
   foreach($name_result as $r){
      echo "This name is not matching: ".$r;
   }
}

所以我的结果是:

此名称不匹配:sam

我的问题是,我在结果中也需要键名。但是这个密钥只存在于文本文件中。

所以,如果我写这个:

foreach ($properties as $key => $row) {
     $name_new[$key] = $row['name'];    
}

以下是$name_new[$key] ...

的结果
array(2) {
  ["123"]=>
  string(32) "john"
  ["456"]=>
  string(32) "frank"
}       

......我拿到了钥匙。但是如何将此密钥连接到我的结果sam

我需要的结果是

此名称与sam不匹配(键:456)

2 个答案:

答案 0 :(得分:3)

请改进以下代码

if ($name_new != $name_orig) {
   $name_result = array_diff_assoc($name_orig, $name_new);
   foreach($name_result as $k=> $r){
      echo "This name is not matching: ".$r." and key:".$k;
   }
}

希望这有效

答案 1 :(得分:1)

比较两个数组时,只需将索引添加到foreach循环中即可:

foreach($name_result as $k => $r){
   echo "This name is not matching: ".$r. "(Key:".$k.")";
}