如果索引小于

时间:2017-10-26 06:13:18

标签: php arrays

如果索引小于我想要的数字,还有更简单的方法和更少的代码来打印数组中的所有字符串吗?例如:

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

我想要打印索引小于3的所有字符串,并按/分隔,如下所示:

A/B/C

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

2 个答案:

答案 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"
  

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

我不建议使用array_slice。为什么?您的标题描述了您的问题以及如何处理数组:&#34;如果索引小于某些内容,则打印所有数组字符串&#34;

因此,您需要一个代码来删除其键大于或等于某个值的数组的所有元素(在您的情况下为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对数组的值进行排序,但您的密钥将会更改:

  

此函数为数组中的元素指定新键。它将删除可能已分配的任何现有密钥,而不仅仅是重新排序密钥。

答案 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()函数,如下所示: -

https://eval.in/887231