如果索引小于我想要的数字,还有更简单的方法和更少的代码来打印数组中的所有字符串吗?例如:
$string = Array(
[0] => A,
[1] => B,
[2] => C,
[3] => D
);
我想要打印索引小于3的所有字符串,并按/
分隔,如下所示:
A/B/C
我知道我可以使用implode
然后将foreach
与if
一起使用,但我想知道是否可以只用一行来完成?感谢
答案 0 :(得分:1)
您可以使用array_filter
过滤低于3(或其他值)的所有数组键:
<?php
$arr = ['A', 'B', 'C', 'D'];
$newArr = array_filter($arr, function($val) {
return $val < 3;
}, ARRAY_FILTER_USE_KEY);
var_dump(implode('/', $newArr)); //string(5) "A/B/C"
我不建议使用array_slice
。为什么?您的标题描述了您的问题以及如何处理数组:&#34;如果索引小于某些内容,则打印所有数组字符串&#34; 。
因此,您需要一个代码来删除其键大于或等于某个值的数组的所有元素(在您的情况下为3)。因此,您可以使用for
或foreach
循环检查每个项目是否符合此条件并删除无效项目。另一种可能性是使用array_filter
的解决方案(如上所述)。
为什么不array_slice
:此函数仅从数据中独立于键提取切片。您可以定义此切片的外观,但最后您无法确定所有密钥是否有效,因为您(和array_slice
)不会检查它。
array_slice
不做你想做的事的例子:
<?php
$input = ['A', 'B', 'C', 'D', 'E'];
unset($input[1]);
//using array_slice
var_dump(implode('/', array_slice($input, 0, 3))); //string(5) "A/C/D"
//using array_filter
$output = array_filter($input, function($val) {
return $val < 3;
}, ARRAY_FILTER_USE_KEY);
var_dump(implode('/', $output)); //string(3) "A/C"
如果您确定阵列已完成且没有丢失密钥,则可以使用array_slice
,但不会删除特定密钥。
您可以使用sort
对数组的值进行排序,但您的密钥将会更改:
此函数为数组中的元素指定新键。它将删除可能已分配的任何现有密钥,而不仅仅是重新排序密钥。
答案 1 :(得分:0)
您可以使用implode()和array_slice()执行此操作,如下所示: -
$input = array("a", "b", "c", "d", "e");
$output = implode("/",array_slice($input,0, 3));
echo $output;
输出: - https://eval.in/887209
注意: - 如果你的数组没有排序,那么你也需要a/b/c
然后使用sort()函数,如下所示: -