【问题标题】:Reindex array by increasing and decreasing all of top indexes通过增加和减少所有顶部索引来重新索引数组
【发布时间】:2013-08-23 02:21:16
【问题描述】:

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

How to Remove Array Element and Then Re-Index Array?

PHP reindex array?

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

我有下面的数组

$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!

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

感谢任何帮助!

【问题讨论】:

  • 所以您要做的就是重新索引键?
  • @aztechy 你的问题并不积极,因为我已经在我的问题上谈到了它。在大多数情况下,我说这是我遇到的最荒谬的要求,我尽量避免这样做。要求很复杂,我只是说有问题。
  • 这只是一个没有恶意的问题,旨在进一步明确解决方案。它看起来就像更新一级索引一样简单,为什么要实现它,正如你所说的那样。无论如何,长话短说,这个问题没有任何伤害。

标签: php arrays reindex


【解决方案1】:

这应该是诀窍。

    // Increase by one
    $input = array_combine(
        array_map(function($value) {
            return $value += 1;
        }, array_keys($input)), $input
    );

【讨论】:

  • 这是一个很好的方式,我可以看到它实际上与 Shomz 建议的基本方式没有什么不同,不是吗?顺便说一句,我为您的回答投了一票,谢谢。
  • 任何一种方式都可以。从技术上讲,如果您使用 Shomz 建议的循环,则必须将结果分配给新数组,然后如果您希望保留相同的变量,则返回旧数组。不过,使用循环可能更具可读性。
  • 如果通过引用传递,则不需要新数组。
【解决方案2】:

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

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

您也可以通过passing the original array by reference进行操作。

【讨论】:

  • 谢谢,我真的不知道这是最好的方法,因为就像我说的,如果没有其他出路,我认为这是最终的解决方法。一旦没有更好的解决方案,我会立即将其标记为答案。
  • 这个还有很多其他的方法,这个是最直接最基础的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-08
  • 1970-01-01
  • 2018-07-26
  • 1970-01-01
  • 2021-01-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多