如何比较两个数组的差异并输出只在一个数组中存在的键


How can I compare the differences of two arrays and output the key, which only exits in one array?

我有一个由文本文件创建的数组($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)不匹配

请改进以下代码

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;
   }
}

希望这能起作用

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

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