如果我想要输出数组中索引小于某个数字的所有字符串,是否有更简便的方法和更少的代码?例如:
$string = Array(
[0] => A,
[1] => B,
[2] => C,
[3] => D
);
我想要打印出所有索引小于3的字符串,并使用
/
分隔,格式如下:A/B/C
我知道我可以使用
implode
,然后使用foreach
和if
,但我想知道是否可以只用一行完成?谢谢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
。为什么?你的标题描述了你的问题以及如何处理数组:"如果索引小于某个值,则打印所有数组字符串"。因此,你需要一段代码来删除所有键大于或等于某个值(在你的情况下为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
对数组的值进行排序,但是键将会被改变:
该函数会为数组中的元素分配新的键。它将删除任何已经分配的现有键,而不仅仅是重新排序键。
array_slice
仅按定义获取项目(不验证键)。 - Sebastian Brosch您可以使用 implode() 和 array_slice() 来实现,代码如下:
$input = array("a", "b", "c", "d", "e");
$output = implode("/",array_slice($input,0, 3));
echo $output;
注意:如果您的数组未排序,但仍想要a/b/c
,请使用以下方式的sort()函数:
array_slice()
... - Carsten Massmann