如果索引小于某个值,打印所有数组字符串

3

如果我想要输出数组中索引小于某个数字的所有字符串,是否有更简便的方法和更少的代码?例如:

$string = Array(
    [0] => A,
    [1] => B,
    [2] => C,
    [3] => D
);

我想要打印出所有索引小于3的字符串,并使用/分隔,格式如下:
A/B/C

我知道我可以使用implode,然后使用foreachif,但我想知道是否可以只用一行完成?谢谢

使用join函数?... - Álvaro Touzón
1
阅读手册怎么样?array_slice()... - Carsten Massmann
2个回答

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"

演示: https://ideone.com/B1rn6I
我不建议使用array_slice。为什么?你的标题描述了你的问题以及如何处理数组:"如果索引小于某个值,则打印所有数组字符串"。因此,你需要一段代码来删除所有键大于或等于某个值(在你的情况下为3)的数组元素。所以你可以使用forforeach循环来检查每个项目是否符合这个条件并删除无效的项目。另一种可能性是使用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"

演示: https://ideone.com/npySEs

如果您可以确定数组完整且没有遗漏的键,您可以使用array_slice,但它不是用于删除特定键的。


您可以使用 sort 对数组的值进行排序,但是键将会被改变:

该函数会为数组中的元素分配新的键。它将删除任何已经分配的现有键,而不仅仅是重新排序键。


谢谢!如果数组是无序的,我可以使用这个。 :) - Brian Antiqueña
...或者缺少索引。这是获取值小于3的键的安全方法。array_slice仅按定义获取项目(不验证键)。 - Sebastian Brosch

0

@BrianAntiqueña 很高兴能帮助你。请也查看注释部分。谢谢。 - Alive to die - Anant

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接