Php 单个多维数组键突然消失?
我使用多维数组在脚本中存储一些信息。有数百个额外的密钥,但前三个看起来是这样的(私人信息被审查): 我想消除重复的键值,例如Php 单个多维数组键突然消失?,php,serialization,multidimensional-array,deserialization,Php,Serialization,Multidimensional Array,Deserialization,我使用多维数组在脚本中存储一些信息。有数百个额外的密钥,但前三个看起来是这样的(私人信息被审查): 我想消除重复的键值,例如$array[1],它是$array[0]的副本。要做到这一点,我要这样做: function multi_array_unique($array) { $result = array_map("unserialize", array_unique(array_map("serialize", $array))); foreach ($result as $key
$array[1]
,它是$array[0]
的副本。要做到这一点,我要这样做:
function multi_array_unique($array)
{
$result = array_map("unserialize", array_unique(array_map("serialize", $array)));
foreach ($result as $key => $value) {
if (is_array($value)) {
$result[$key] = multi_array_unique($value);
}
}
return $result;
}
$unique_array = multi_array_unique($array);
$unique_array = array_values($unique_array);
现在,这在删除阵列中的所有重复项方面做得非常好。。。除了一件我还没弄明白的小事。这就是阵列现在的外观:
Array
(
[0] => Array
(
[last_name] => LAST NAME
[first_name] => COLLEEN
[middle_name] => F
[dob] => 00/00/87
[race] => W
[city] => SOME CITY
)
[1] => Array
(
[last_name] => LAST NAME
[first_name] => STEPHANIE
[middle_name] => L
[dob] => 00/00/74
[sex] => F
[race] => W
[city] => SOME CITY
)
[2] => Array
(
[last_name] => LAST NAME
[first_name] => ASIA
[middle_name] => ALIA
[dob] => 00/00/88
[sex] => F
[race] => B
[city] => SOME CITY
)
)
$array[0][“sex”]
到底去了哪里???这是唯一缺少的一个,我在这个数据集中每隔93个键检查一次。只有$array[0]
缺少[“sex”]
键。我完全被难住了。你们有什么想法吗
编辑:
Ray能够提供一个有效的解决方案来实现我想要的结果,但是我仍然想知道是什么原因导致了最初的错误。
以下是Ray的工作代码(改编成函数):
尝试以下操作以消除重复成员:
$newArray = new array();
foreach($originalArray as $subArray){
if(!in_array($subArray, $newArray){
$newArray[] = $subArray;
}
}
数组$newArray应该只有原始数组的唯一成员。您是否试图避免主数组中只有100%重复的子数组?如果一个相似的数组甚至有一个不同的值,你想保留它吗?也许PHP不想做爱,我知道这没有帮助。但我们可以把问题说成:当科琳丢失她的复制品时,她停止了性行为。这让我笑了。忍不住更严肃地指出这一点,试着看看array_map(“serialize”、$array)和array_unique(array_map(“serialize”、$array))@Asad的结果是什么,这是对缺失关键点的另一个双关语吗?Lol修正了一些拼写错误,但是这个方法非常有效。非常感谢。我仍然想知道最初的方法是怎么回事。
function multi_array_unique($multi_array)
{
$newArray = array();
foreach($multi_array as $subArray) {
if(!in_array($subArray, $newArray)) {
$newArray[] = $subArray;
}
}
return $newArray;
}
$newArray = new array();
foreach($originalArray as $subArray){
if(!in_array($subArray, $newArray){
$newArray[] = $subArray;
}
}