将项目添加到关联数组


87
//go through each question
foreach($file_data as $value) {
   //separate the string by pipes and place in variables
   list($category, $question) = explode('|', $value);

   //place in assoc array
   $data = array($category => $question);
   print_r($data);

}

这无法正常工作,因为它替换了数据的值。我如何让它在每个循环中添加一个关联值?$file_data是具有动态大小的数据数组。

Answers:


95

我想你要 $data[$category] = $question;

或者,如果您需要一个将类别映射到问题数组的数组:

$data = array();
foreach($file_data as $value) {
    list($category, $question) = explode('|', $value, 2);

    if(!isset($data[$category])) {
        $data[$category] = array();
    }
    $data[$category][] = $question;
}
print_r($data);

9
其他程序员会讨厌您输入错误,尽管他们也会被迫这样做或修复它们。
ThiefMaster 2011年

我对array_push太满意了,忘了基础知识!真的很有帮助!
克鲁格

120

你可以简单地做到这一点

$data += array($category => $question);

如果您使用的是php 5.4+

$data += [$category => $question];

21
到底是什么?
菲尔

9
这是将项目添加到关联数组的正确答案。
andreszs

7
也添加多个元素:$ data + = ['x'=> 1,'y'=> 2];
split19

如果您不希望在数组中最终包含多个对象,则可以使用这种方法
DragonFire

注意:如果您的数组还没有使用相同键的元素,那么它可以工作,因此它不能覆盖现有元素。
Mohamad Hamouday,

29

在for循环之前:

$data = array();

然后在您的循环中:

$data[] = array($catagory => $question);

2
如果这样做的话,别忘了先使用$ data = array();初始化数组。否则php会发出通知
Alex Bailey

我认为SO缓存了我的答案,就像发布的一样,我意识到我没有看到它在他的代码中被初始化。所以我加了它,我看到您的评论后,谢谢:-)
教育部

4
这没有用,因为它在数组内部创建了一个数组。不好意思,如果我的问题还可以解决。
Phil

PHP 5.4+,您可以编写更少的代码:$data=[]; $data[] = [$category => $question];
Justin

$res = array(); $res[] = array('foo' => $bar); $foo = $res['foo'];失败,并带有未定义的索引:foo in ..,但低于建议的加号。
qrtLs

7

我知道这是一个老问题,但是您可以使用:

array_push($data, array($category => $question));

这将把当前操作推array到最后array。或者,如果您只是想将单个值添加到数组的末尾,而不要添加更多的数组,则可以使用以下方法:

array_push($data,$question);

6

对于也需要添加到2d关联数组中的任何人,您也可以使用上面给出的答案,并使用如下代码

 $data[$category]["test"] = $question

然后可以调用它(通过以下方法测试结果:

echo $data[$category]["test"];

应该打印$ question

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.