加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 切片数组的一部分并按值x引发数字键

发布时间:2020-12-13 16:09:25 所属栏目:PHP教程 来源:网络整理
导读:假设您有一个数字键的数组,如 $ar = [0 = 'a',1 = 'b',2 = 'c',3 = 'd',4 = 'e',5 = 'f',6 = 'g']; 和定义的偏移量为4($offset = 4).现在,您想要从偏移量开始切片该数组的一部分. $slice = array_slice($ar,$offset,null,true); 而且您不仅要保留原始密钥,而
假设您有一个数字键的数组,如

$ar = [0 => 'a',1 => 'b',2 => 'c',3 => 'd',4 => 'e',5 => 'f',6 => 'g'];

和定义的偏移量为4($offset = 4).现在,您想要从偏移量开始切片该数组的一部分.

$slice = array_slice($ar,$offset,null,true);

而且您不仅要保留原始密钥,而且实际上将它们提高1,因此结果将是:

Array
(
    [5] => e
    [6] => f
    [7] => g
)

代替

Array
(
    [4] => e
    [5] => f
    [6] => g
)

当然,你可以循环遍历数组(foreach,array_walk)并重新分配所有键,例如:

$new_ar = [];
$raise_by = 1; // Could be any other amount
foreach ($slice as $key => $val) {
    $new_ar[$key + $raise_by] = $val;
}

但有没有办法在没有额外的外部循环和(重新)分配密钥的情况下做到这一点?像“在x位置切割数组并用x 1开始键”之类的东西?

编辑/可能的解决方案:

受到评论的启发,除了Brian在How to increase by 1 all keys in an array?的评论之外,我还看到了两种可能的解决方案

静态,短期和基本:

array_unshift($ar,0);
$result = array_slice($ar,$offset + 1,true);

更灵活,但性能可能更差:

$shift = 1;
$slice = array_slice($ar,true);
$ar = array_merge(range(1,$offset + $shift),array_values($slice));
$result = array_slice($ar,$offset + $shift,true);

优点是可以将键移动任意值.

解决方法

你可以这样做.如果你不想使用循环.使用array_combine,空数组范围为5-7

$ar = [0 => 'a',6 => 'g'];
$offset = 4;
$slice = array_slice($ar,true);
$slice = array_combine(range($offset+1,count($slice)+$offset),array_values($slice));//<--------check this

echo "<pre>";
print_r($slice);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读