首先,我必须列出我找到的内容
How to Remove Array Element and Then Re-Index Array?
在我的案例中他们没有意义。我已经陷入了荒谬的要求,我迫不及待地想找到出路,那么请不要问我为什么要那样做。
我有以下数组
$input = array(
0=>array('a', 'b'=>array('c')),
1=>array('b', 'c'=>array('d')),
2=>array('c', 'd'=>array('e')),
);
我希望将所有键增加1或减1(可接受索引为负int数)
这是预期的结果
//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!
我能想到的是处理数组以手动交换名单,如果没有其他解决方法,这将是最终方式。
感谢任何帮助!
答案 0 :(得分:2)
这应该是诀窍。
// Increase by one
$input = array_combine(
array_map(function($value) {
return $value += 1;
}, array_keys($input)), $input
);
答案 1 :(得分:1)
最简单的方法可能是使用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执行操作。