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); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |