【问题标题】:PHP add to beginning of array without reorderingPHP添加到数组的开头而不重新排序
【发布时间】:2011-07-14 03:10:48
【问题描述】:

我已经尝试搜索我的问题的答案,但我找不到一个在不重新排序数字索引的情况下做到这一点的答案。

有没有办法在不使用循环的情况下将字符串添加到数组的开头而不重新排序键(数字键)?

谢谢

编辑:

我会试着解释一下这个场景。 (我正在使用 CodeIgniter)。

我有一个在整个应用程序中使用的数组。该数组还用于创建下拉列表并以我拥有的表单验证这些下拉列表值。我想做的是在数组的开头插入一个空白值,以便我的下拉菜单默认选择一个空白选项。

所以从这里

1 => 你好
2 => 世界

'' => ''
1 => 你好
2 => 世界

【问题讨论】:

  • 我不确定你在说什么。任何示例输入/输出?
  • 新元素应该有什么索引?为什么你需要这个条件(没有重新排序键)?如果您仍然通过键访问元素,那么顺序无关紧要。如果你遍历它们,那么索引就无关紧要了。那你为什么需要它?也许有更好的策略适合您的情况。
  • @BoltClock @Felix-Kling @yoda - 我试图在我的原始帖子中解释一下 - 谢谢

标签: php arrays indexing add


【解决方案1】:

由于您不想更改数字索引,我假设 array_unshift 将不起作用。

所以也许如果你知道索引你可以这样做:

$x = array(1 => 1, 2 => 2, 3 => 3); 
$y = array(1101 => 123);
var_dump( $y + $x );

/* Output:
array(4) {
  [1101]=>
  int(123)
  [1]=>
  int(1)
  [2]=>
  int(2)
  [3]=>
  int(3)
}
*/

请注意,密钥现在确实位于数组前面,因此foreach 可以正常工作。

对编辑的回应:

$x = array(1 => "Hello", 2 => "Welt"); 
$y = array("" => "");

var_dump($y + $x);

/*
array(3) {
  [""]=>
  string(0) ""
  [1]=>
  string(5) "Hello"
  [2]=>
  string(4) "Welt"
}
*/

【讨论】:

  • 这种方法的问题是如果你有冲突的键,它们会被覆盖。
猜你喜欢
  • 2012-08-21
  • 2011-08-12
  • 2011-04-09
  • 2015-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多