【发布时间】:2021-07-31 16:19:32
【问题描述】:
我的问题是我有两个不一定相同大小的数组,它们包含始终具有相同大小的关联数组,例如:
$a = array([0] => array(["ref"]=> string(19) "ygz121byr46dl4795eu", ["place"]=> string(5) "Paris", ["date"]=> string(25) "2012-03-14T16:42:47+01:00", ...),
[1] => array(["ref"]=> string(19) "cer123bur45dl4795ef", ["place"]=> string(8) "New-York", ["date"]=> string(25) "2015-06-14T05:05:49+01:00", ...),
[2] => array(["ref"]=> string(19) "abc123abc12ab1234ab", ["place"]=> string(6) "London", ["date"]=> string(25) "2020-02-12T08:03:39+01:00", ...),
...);
$b = array([0] => array(["ref"]=> string(19) "ygz121byr46dl4795eu", ["place"]=> string(5) "Paris", ["date"]=> string(25) "2012-03-14T16:42:47+01:00", ...),
[1] => array(["ref"]=> string(19) "cer123bur45dl4795ef", ["place"]=> string(8) "New-York", ["date"]=> string(25) "2015-06-14T05:05:49+01:00", ...),
...);
我尝试了几种方法,但似乎没有任何效果,或者我只得到没有值的键。 我想在一个数组中得到差异($a 中的所有元素都不存在 $b),所以这里的结果是:
$result = array( array(["ref"]=> string(19) "abc123abc12ab1234ab", ["place"]=> string(6) "London", ["date"]=> string(25) "2020-02-12T08:03:39+01:00", ...),
...);
“ref”键是每个数组的唯一字段,所以我需要在 $result 中所有“ref”键不在 $b 中的文档
编辑:我找到了 (https://stackoverflow.com/a/42530586/15742179) 一种使用 array_diff()、array_map()、json_encode() 和 decode() 方法的方法。感谢 Ifnot
// compare all value
$result = array_diff(array_map('json_encode', $a), array_map('json_encode', $b));
// decode the result
$result = array_map('json_decode', $result);
【问题讨论】:
-
先定义“差异”。
$a中的所有元素都不存在$b?另一种方式?两个都?相同的元素,但在不同的键上也会构成差异吗? -
比较时顺序重要吗?
-
感谢 El-Vanja,为了更清楚,我已经编辑了问题
-
数据在$a和$b之间不一定按相同的顺序排序,所以我认为这里的顺序并不重要但我可能错了。
标签: php arrays multidimensional-array associative-array