0

首先,我必须列出我发现的内容

如何删除数组元素然后重新索引数组?

PHP重新索引数组?

在我的情况下,它们没有意义。我陷入了荒谬的要求,我已经强迫自己寻找出路,那么请不要问我为什么要这样做。

我有以下数组

$input = array(
          0=>array('a', 'b'=>array('c')),
          1=>array('b', 'c'=>array('d')),
          2=>array('c', 'd'=>array('e')),
        );

我想将所有键增加 1 或减少 1(可接受的索引是负整数)

这是预期的结果

//after increased by 1
$input = array(
          1=>array('a', 'b'=>array('c')),
          2=>array('b', 'c'=>array('d')),
          3=>array('c', 'd'=>array('e')),
        );

或者

//after decreased by 1
$input = array(
          -1=>array('a', 'b'=>array('c')),
          0=>array('b', 'c'=>array('d')),
          1=>array('c', 'd'=>array('e')),
        );

我从raina77ow得到的 壁橱答案How to increase by 1 all keys in an array?

$arr = array_flip(array_map(function($el){ return $el + 1; }, array_flip($arr)));

但它只适用于简单的数组键对,如果数组值是其他数组而不是字符串或整数,则会引发异常

array_flip(): Can only flip STRING and INTEGER values!

我能想到的事情是手动处理数组以交换名册,如果没有任何其他解决方法,这将是最后的方法。

任何帮助表示赞赏!

4

2 回答 2

2

这应该是诀窍。

    // Increase by one
    $input = array_combine(
        array_map(function($value) {
            return $value += 1;
        }, array_keys($input)), $input
    );
于 2013-08-23T02:32:04.677 回答
1

最简单的方法可能是使用foreach并制作一个新数组......像这样:

$new = array();
foreach($arr as $k=>$v) {
    $new[$k+1] = $v; // either increase
    $new[$k-1] = $v; // or decrease
}

您还可以通过引用传递原始数组来执行操作。

于 2013-08-23T02:30:15.310 回答