如何替换PHP二维数组每行最后元素为该行前序元素乘积?
解决方案
一、先搞懂array_splice()的参数含义
array_splice()是PHP中用于删除、替换数组元素的函数,参数格式为:
array_splice(array &$input, int $offset, ?int $length = null, mixed $replacement = [])
逐个拆解参数:
$input:要操作的原数组(会直接修改原数组本身)$offset:操作的起始位置:- 正数:从数组开头数第
$offset个索引位置开始 - 负数:从数组末尾倒数第
abs($offset)个位置开始
- 正数:从数组开头数第
$length:要删除的元素数量:- 正数:删除指定数量的元素
- 负数:删除从
$offset开始到倒数第abs($length)个元素之前的所有元素 - 省略:删除从
$offset到数组末尾的全部元素
$replacement:可选参数,用来替换被删除部分的元素(可以是单个值或数组)
比如你看到的array_splice($input, 1, -1),意思是:从$input数组的索引1位置开始,删除到倒数第1个元素之前的所有元素(最终保留索引0和最后一个元素)。
二、实现需求的具体代码
针对你的二维数组修改需求,不用array_splice也能简单实现,核心逻辑是:遍历每个子数组,去掉最后一个元素,计算前面元素的乘积,再把乘积追加到子数组末尾。
方法一:用array_pop()和array_product()(直接修改原数组)
// 你的原始二维数组 $originalArray = [ [4, 3, 5, 7, 210], [4, 9, 5, 7, 210], [4, 9, 25, 7, 210] ]; // 遍历处理每个子数组 foreach ($originalArray as &$subArray) { // 弹出子数组的最后一个元素(无需保留原数值,直接移除) array_pop($subArray); // 计算当前子数组所有元素的乘积 $product = array_product($subArray); // 将乘积追加到子数组末尾 $subArray[] = $product; } unset($subArray); // 解除引用,避免后续操作意外修改数组 // 输出处理后的结果 print_r($originalArray);
运行后会得到符合要求的数组:
Array ( [0] => Array ( [0] => 4 [1] => 3 [2] => 5 [3] => 7 [4] => 420 ) [1] => Array ( [0] => 4 [1] => 9 [2] => 5 [3] => 7 [4] => 1260 ) [2] => Array ( [0] => 4 [1] => 9 [2] => 25 [3] => 7 [4] => 6300 ) )
方法二:用array_slice()(不修改原数组,返回新数组)
如果不想改动原始数组,可以用array_slice()截取前n-1个元素,计算乘积后拼接成新数组:
$originalArray = [ [4, 3, 5, 7, 210], [4, 9, 5, 7, 210], [4, 9, 25, 7, 210] ]; $newArray = []; foreach ($originalArray as $subArray) { // 截取子数组除最后一个元素外的所有内容 $elements = array_slice($subArray, 0, -1); // 计算乘积 $product = array_product($elements); // 拼接成新的子数组并加入结果集 $newArray[] = array_merge($elements, [$product]); } print_r($newArray);
三、如果一定要用array_splice()实现
也可以直接用array_splice()替换子数组的最后一个元素,代码如下:
$originalArray = [ [4, 3, 5, 7, 210], [4, 9, 5, 7, 210], [4, 9, 25, 7, 210] ]; foreach ($originalArray as &$subArray) { // 截取前n-1个元素 $elements = array_slice($subArray, 0, -1); $product = array_product($elements); // 从倒数第1个位置开始,删除1个元素,替换为计算出的乘积 array_splice($subArray, -1, 1, $product); } unset($subArray); print_r($originalArray);
这里array_splice($subArray, -1, 1, $product)的含义是:定位到子数组的倒数第1个元素,删除该元素,然后将$product插入到这个位置。
内容的提问来源于stack exchange,提问作者Joe Shamuraq
相关产品推荐
相关产品推荐

