Php 获取数组中的重复键值

Php 获取数组中的重复键值,php,arrays,Php,Arrays,由于某些原因,在尝试填充数组时,我没有得到期望的结果。在第一部分中,我创建了一个数组数组,每个数组的键都有一个名称,例如“Biology Education”。但是,当我填充同一个数组时,出于某种原因,它不会使用相同的数组元素,而是使用一个新的数组元素 因此,第1部分产生了一个包含13个数组元素(空)的数组。第2部分运行后,数组有26个数组元素,前13个为空,其余13个按需填充 我之所以想工作,是因为前13个数组元素是经过排序的。最后13个是杂乱无章的 为什么会发生这种情况?我如何纠正它 //

由于某些原因,在尝试填充数组时,我没有得到期望的结果。在第一部分中,我创建了一个数组数组,每个数组的键都有一个名称,例如“Biology Education”。但是,当我填充同一个数组时,出于某种原因,它不会使用相同的数组元素,而是使用一个新的数组元素

因此,第1部分产生了一个包含13个数组元素(空)的数组。第2部分运行后,数组有26个数组元素,前13个为空,其余13个按需填充

我之所以想工作,是因为前13个数组元素是经过排序的。最后13个是杂乱无章的

为什么会发生这种情况?我如何纠正它

// PART 1 
// Create array of research areas
$research_result = db_fetch_array($research['research_query_result']);
$research['areas'] = explode("\n", $research_result['options']);
// Put the values as key and every key the new value of an array object
$research['areas'] = array_fill_keys($research['areas'], array());

// PART 2 
foreach($research['user'] as $uid => &$user_object) {
    $user_object->profile_research_areas = explode(", ", $user_object->profile_research_areas);
    foreach($user_object->profile_research_areas as $key => $area) {
        $research['areas'][$area][] = $uid;
    }
}
最终结果的一个示例是数组$research['areas']中的2元素如下所示:

...(26 elements)
$research['areas']['Biology Education'] (0 elements)
$research['areas']['Biology Education'] (11 elements)
...

希望它是清楚的。

您可以使用var\u dump或print\r将一些调试输出放入其中,以查看每个阶段阵列中的内容。除此之外,我不确定你的问题是什么。正在复制哪个元素?我唯一能看到这样事情发生的地方就是这里:

    $research['areas'][$area][] = $uid;
其中[]部分表示“将$uid作为新元素附加到$research['areas'][$area]


更新:

在第一部分之后,你会看到这样的情况:

$research = array(
   'areas' => array(
        'Biology education' => array(),
        'Chemistry education' => array()
   )
);
您希望在第2部分中出现类似的情况:

$research = array(
   'areas' => array(
        'Biology education' => array(42, 3.14159265, 2.181281),
        'Chemistry education' => array()
   )
);
但结果是:

$research = array(
   'areas' => array(
        'Biology education' => array(),
        'Biology education' => array(42, 3.14159265, 2.181281), // <--duplicate entry?
        'Chemistry education' => array()
   )
);
$research=array(
“区域”=>数组(
“生物教育”=>array(),
“生物教育”=>array(42,3.14159265,2.181281),//array()
)
);

还是我完全猜错了?如果是这样的话,那么很可能你的两个“生物教育”键实际上并不相同。可能有一个不可打印的字符嵌入其中(尾随null?在web输出中看不到的字符,等等)。有些东西会导致它们是不同的键,否则您的PHP在某个地方会出现严重故障。

看不出为什么它会产生不同,但我通常会将我自己与&and foreach循环混淆,所以尝试一下,看看它会有什么不同:

// PART 2 
foreach($research['user'] as $uid => &$user_object) {
    $user_object->profile_research_areas = explode(", ", $user_object->profile_research_areas);
}

// PART 3
foreach($research['user'] as $uid => $user_object) {
    foreach($user_object->profile_research_areas as $key => $area) {
        $research['areas'][$area][] = $uid;
    }
}

所以我在数组中有一个键叫做“生物教育”。您指出的$area变量也有字符串“Biology Education”。但它不是将$uid变量附加到现有元素,而是创建一个新的元素。导致具有相同名称的键的重复。我们需要查看最终使用的数组的转储以及希望最终使用的数组的模拟转储。我使用Krumo,类似于var_dump()和print_r()。这就是帮助我理解我得到的不同结果的原因。对不起,这也不起作用。我仍然无法找到问题,只需尝试另一种方法来解决我试图用代码解决的关键问题。谢谢能否在第1部分末尾提供$research['areas']的var_转储,以及$user\u object->profile\u research\u areas变量之一的var_转储?转储太大了,但我认为我在主要问题中的最后一个示例应该足够了。