【发布时间】:2018-05-08 14:33:29
【问题描述】:
我在循环上构建了一个数组,因此我的数组中的每个对象都以相同的方式构建,具有相同的键和相同的数据类型。我的数组看起来像这样:
$array_of_obj = array(
0 => {
date: "2017-11-26"
hour_array: Array [ "11:00:00", "12:00:00", "13:00:00", … ]
id_pb: "32"
id_slot_pb: "704"
},
1 => {
date: "2017-11-26"
hour_array: Array [ "11:00:00", "12:00:00", "13:00:00", … ]
id_pb: "32"
id_slot_pb: "704"
},
2 => {
date: "2017-11-27"
hour_array: Array [ "11:00:00", "12:00:00", "13:00:00", … ]
id_pb: "32"
id_slot_pb: "705"
},
3 => {
date: "2017-11-27"
hour_array: Array [ "11:00:00", "12:00:00", "13:00:00", … ]
id_pb: "32"
id_slot_pb: "705"
},
4 => {
date: "2017-11-28"
hour_array: Array [ "11:00:00", "12:00:00", "13:00:00", … ]
id_pb: "32"
id_slot_pb: "706"
},
// etc.
);
所以我有一个包含多个相同对象的数组,我想在我的大数组中有唯一的对象。
我找到了这个解决方案:
How do I use array_unique on an array of arrays?
所以它是完美的,即使它是数组数组我认为它可以工作。我用我找到的两个最好的答案对其进行了测试:
$array_of_obj = array_intersect_key($array_of_obj, array_unique(array_map('serialize', $array_of_obj)));
与
$array_of_obj = array_intersect_key($array_of_obj, array_unique(array_map(function ($el) {
return $el['id_slot_pb'];
}, $array_of_obj)));
我对两者都有相同的结果:
$array_of_obj = array(
0: Object { id_slot_pb: "704", id_pb: "32", date: "2017-11-26", … }
4: Object { id_slot_pb: "706", id_pb: "32", date: "2017-11-28", … },
6: Object { id_slot_pb: "707", id_pb: "32", date: "2017-11-29", … },
8: Object { id_slot_pb: "708", id_pb: "32", date: "2017-11-30", … },
//etc
);
如您所见,他跳过了 key = 2 或 3(两者相同)的对象并从 0 变为 4... 我做了更多的测试,用更多的重复构建我的“array_of_obj”(我有相同的结构,但有 5 x 5 相同的对象,他仍然跳过了相同的数据。
我试图检查我的错误在哪里,所以我只这样做:
$array_of_obj = array_map('serialize', $array_of_obj);
没关系,我现在有一个字符串数组,结果相同(键 0 和 1 相同,2 和 3 相同,4 和 5 等)
但是当我使用 array_unique 时,正如我所说,我丢失了密钥 2 和 3:
$array_of_obj = array_unique(array_map('serialize', $array_of_obj));
我做了一个小测试来检查 array_unique 是否认为数据相同,即使不是这样:
$array_of_obj = array_map('serialize', $array_of_obj);
$test = array();
$string_test = "";
foreach($array_of_obj as $array) {
if ($string_test !== $array) {
$string_test = $array;
$test[] = $array;
}
}
但它起作用了,我在我的 $test 数组中序列化了所有唯一数据。
我不明白为什么它适用于所有其他对象,但相同的数据只是被跳过或被视为与其他对象相同,即使它不是真的......如果有人有一些线索或逻辑解释它会很好,谢谢!
【问题讨论】:
-
你能发布你的对象数组而不是格式错误的数组吗?我只是在 phpfiddle 中尝试并在这两种情况下都能完美运行
-
代码位于我在 Ajax 函数中调用的 PHP 脚本中,因此我使用“console.log(response)”检查数据。 “格式错误的数组”(我认为的结果是那个?)是我的控制台的复制/粘贴,他与我发布的第一个相同,没有重复和“id_slot_pb:705”的数据,正如我所说。如果它对你有用,它会是一个可视化问题吗?
-
刚刚编辑了答案
标签: php arrays unique-array