由于某种原因,在尝试填充数组时,我无法获得所需的结果。在第一部分中,我创建了一个数组数组,每个数组的键都有一个名称,如“生物学教育”。但是当我然后填充相同的数组时,它不会出于某种原因使用相同的数组元素而是使用新的数组元素。
所以第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)
...
希望很清楚。
答案 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;
}
}