如何将数组值添加到关联数组的中间?

32
假设我有这个数组:
``` $array = array('a' => 1, 'z' => 2, 'd' => 4); ```
在脚本后面,我想在`'z'`之前添加值`'c' => 3`。 我该怎么做?
是的,顺序很重要。 当我通过数组运行foreach()时,我不希望将此新添加的值添加到数组的末尾。 我从`mysql_fetch_assoc()`获取此数组。
上面使用的键是占位符。 使用`ksort()`无法实现我想要的效果。 http://www.php.net/manual/en/function.array-splice.php#88896可以实现我要求的效果,但我正在寻找更简单的方法。
以大约30列的示例数据库表为例。 我使用`mysql_fetch_assoc()`获取此数据。 在这个新数组中,在“pizza”和“drink”列之后,我想添加一个名为“full_dinner”的新列,它组合了“pizza”和“drink”的值,以便当我对所述数组运行foreach()时,“full_dinner”直接出现在“drink”之后。

2
有什么比使用array_splice更容易的方式来插入一个值呢?我认为从一开始就清楚地定义你打算做什么非常重要。 - spoulson
4
如果你在意这个数组的顺序,那么你的设计可能存在问题。你能告诉我们为什么需要按顺序排列,以及这个数组实际包含了什么吗?也许我们可以建议一些替代设计来避免这个问题。 - Tesserex
1
@spoulson 先我一步了 - @Citizen,如果可以的话,请给我们一个现实世界的例子,说明您预计如何在之后使用这些数据,以及为什么保留顺序很重要。如果我们只得到了故事的一半,回答起来就很棘手 :-) - richsage
当你说“我想添加一个新列...将'pizza'和'drink'的值组合起来”时...如果你所说的组合是指某种数学运算,那么在SQL查询中进行这种数学运算怎么样?只是一个想法... - Ben
1
我也不喜欢有些人因为不知道答案就会对问题进行投反对票的行为。 关于这个问题,我发现http://php.net/manual/en/class.arrayiterator.php是有用的,但似乎无法使用迭代器完成这个特定的任务。 - TomTom
显示剩余4条评论
13个回答

0
如果你只需要在第n个位置插入数据,这是一个简化的Alix Axel函数。
function array_middle_push( array $array, int $position, array $data ): array {
   return array_merge( array_slice( $array, 0, $position ), $data, array_slice( $array, $position ) );
}

-1

试试这个

$array['c']=3;

关联数组默认情况下不是有序的,但如果您想按字母顺序对它们进行排序,可以使用ksort()按其键对数组进行排序。

如果您查看PHP文章中的ksort(),您会发现很容易按其键对数组进行排序,例如:

<?php
$fruits = array("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
ksort($fruits);
foreach ($fruits as $key => $val) {
    echo "$key = $val\n";
}
?>

// The above example will output:
a = orange
b = banana
c = apple
d = lemon

就像我之前说的一样,使用 ksort() 函数可以按键重新排序数组,这样你的数组就不会是 a, b, d, c 了,而是 a, b, c, d - Ben Everard
1
好的,你在问题中解释得很好。当问题没有讲述完整的故事时,任何人都无法给出准确的答案。 - Ben Everard
那么,如果你有50条记录,你的新记录将被插入到哪里?你的规则是什么,它总是会在最后一条记录之前吗? - Ben Everard
再次感谢您在提问时特别指出,当然,示例a、b、d、c会让人们产生困惑。您是否曾经对我的一些问题进行了负面评价?我不知道为什么您要称呼我为“新手”,而您自己却不得不编辑自己的问题5次才能得到正确的答案! - Ben Everard
PHP关联数组 IS 有序映射 - Tomas
显示剩余4条评论

-1

你可以通过以下方式添加它

$array['c']=3;

如果您绝对需要为打印目的对其进行排序,可以使用PHP的ksort($array)函数。

如果键无法通过ksort进行排序,则必须使用PHP的uasort函数创建自己的排序。请参见此处的示例。

http://php.net/manual/en/function.uasort.php


能否在单个记录上使用uasort?我有数百条记录在这个数组中。 - Citizen
在uasort中,你所做的是为你的键提供一个比较器。你的数组可以任意大小。 - badideas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接