7

来自这里的示例http://php.net/manual/en/function.array-slice.php

$input = array("a", "b", "c", "d", "e");
$output = array_slice($input, 2);      // returns "c", "d", and "e"
$output = array_slice($input, -2, 1);  // returns "d"
$output = array_slice($input, 0, 3);   // returns "a", "b", and "c"

但是如何获得例如“a”、“d”和“e”?

喜欢

$output = array_slice($input, 0, 1);
$output = array_slice($input, 3, 1);
$output = array_slice($input, -1, 1);

但在一个变量中。可能吗?

更新。想要使用数组的第一个、第三个和最后一个元素。好像提取第一个、第三个和最后一个元素并仅使用 3 个元素创建新数组。

4

1 回答 1

8

您将不得不array_merge()混入其中,因为array_slice()只能提取数组的子序列,而不是散布在整个数组中的任意数量的元素。分别提取每个子序列,然后将它们合并到一个数组中:

$slice1 = array_slice($input, 0, 1);
$slice2 = array_slice($input, -2, 2);
$output = array_merge($slice1, $slice2);

但是请注意,这只有在您真正了解数组中的每个元素时才有效。在这种情况下,您也可以使用直接数组访问,这很可能会产生更少的开销并且更容易阅读:

$output = array($input[0], $input[3], $input[4]);

array_filter()使用甚至自定义迭代器可能更合理。但是你没有提供足够的关于你的任务的信息来清楚地说明这一点。

编辑:
如果这只是一个符号问题,您可以尝试指定一个包含所有相关索引的数组,然后使用它来切换它array_fill_keys(),以便使用它array_intersect_key()来仅从数组中提取相关元素:

$indexes = array(0, 3, 4);
$indexArray = array_fill_keys($indexes, true);
$output = array_intersect_key($input, $indexArray);
于 2013-05-06T08:25:04.287 回答