如何从数组中提取某些值

时间:2013-05-06 08:22:08

标签: php slice

此处的示例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);

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

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

1 个答案:

答案 0 :(得分: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);