获取数组中的重复键值

时间:2010-03-22 21:35:18

标签: php arrays

由于某种原因,在尝试填充数组时,我无法获得所需的结果。在第一部分中,我创建了一个数组数组,每个数组的键都有一个名称,如“生物学教育”。但是当我然后填充相同的数组时,它不会出于某种原因使用相同的数组元素而是使用新的数组元素。

所以第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)
...

希望很清楚。

2 个答案:

答案 0 :(得分:1)

您可以使用var_dump或print_r在其中放置一些调试输出,以查看每个阶段的数组中的内容。除此之外,我不确定你的问题是什么。哪个元素被复制?我能看到这样的事情的唯一地方就在这里:

    $research['areas'][$area][] = $uid;

[]部分的意思是“将$ uid附加到$ research ['areas'] [$ area]作为新元素”。


更新

所以你在第1部分后得到类似的东西:

$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()
   )
);
或者我猜完全错了?如果是这种情况,那么很可能你的两个“生物教育”键实际上并不相同。也许有人在某个地方嵌入了一个不可打印的字符(尾随空?一个&amp; nbsp;你没有在网页输出中看到等等......)。有些东西会导致它们成为不同的密钥,否则你的PHP会在某处出现严重的故障。

答案 1 :(得分:1)

看不出为什么它会有所作为,但我通常会把自己和&amp;和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;
    }
}