如何简化PHP中基于数组长度的array_slice数组切片逻辑?
问题描述
我拥有两个数组,需求如下:默认需从每个数组中显示2个元素;若其中一个数组仅含1个元素,则从另一个数组中显示3个元素。我已写出可行代码,但当前代码包含4段判断逻辑,希望能简化为1-2段代码,询问是否可行及实现方式。代码如下:
$array1 = [1, 2, 3, 4]; $array2 = [1, 2, 3, 4]; if (count($array2) >= 2) { $array1 = array_slice($array1 , 0, 2); } else if (count($array2 ) === 1) { $array1 = array_slice($array1 , 0, 3); } if (count($array1) >= 2) { $array2 = array_slice($array2 , 0, 2); } else if (count($array1 ) === 1) { $array2 = array_slice($array2 , 0, 3); }
简化实现方案
完全可以简化,核心思路是先获取两个数组的原始长度,直接根据规则推导每个数组需要截取的元素数量,避免重复的分支判断。
方案一:分步计算(可读性优先)
先计算并存储两个数组的长度,再分别确定截取长度,最后执行截取操作:
$array1 = [1, 2, 3, 4]; $array2 = [1, 2, 3, 4]; $len1 = count($array1); $len2 = count($array2); // 确定array1的截取长度:若array2仅含1个元素则取3,否则取2 $take1 = $len2 === 1 ? 3 : 2; // 确定array2的截取长度:若array1仅含1个元素则取3,否则取2 $take2 = $len1 === 1 ? 3 : 2; $array1 = array_slice($array1, 0, $take1); $array2 = array_slice($array2, 0, $take2);
方案二:内嵌判断(简洁性优先)
如果追求代码紧凑,可以把截取长度的判断直接嵌入array_slice的参数中,省去中间变量:
$array1 = [1, 2, 3, 4]; $array2 = [1, 2, 3, 4]; $len1 = count($array1); $len2 = count($array2); $array1 = array_slice($array1, 0, $len2 === 1 ? 3 : 2); $array2 = array_slice($array2, 0, $len1 === 1 ? 3 : 2);
这两种方式都只需要两次长度计算和两次截取操作,逻辑清晰且代码量大幅减少,完全满足需求。
内容的提问来源于stack exchange,提问作者Hector
相关产品推荐
相关产品推荐

