如何从数组中提取某些值

Posted

技术标签:

【中文标题】如何从数组中提取某些值【英文标题】:How to extract certain values from an array 【发布时间】:2013-04-29 23:20:33 【问题描述】:

示例来自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 个元素创建新数组。

【问题讨论】:

这个问题背后的真正任务是什么? 有什么理由想要这个“在一个变量中”? 当然有可能——您只需编写一个自定义函数,在遇到数组末尾时有效地包装。 (我假设你会打电话给array_slice_wrap($input, -2, 3) 这样的名单。)到目前为止你真的尝试过什么吗? 查看以前的cmets关于“为什么不投票” 必须只管理(处理)数组中的某些值(元素)。 【参考方案1】:

您将不得不将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);

【讨论】:

$output = array($input[0], $input[3], $input[4]);这没关系,如果元素不多的话。但是,例如,如果 $output = array($input[0], $input[3], $input[4], $input[6], $input[7], $input[9], $input[10 ]);我只是想获得更短的代码。 如果除了索引之外你不能指定哪些元素是相关的,你最终将不得不枚举所有索引来进行提取。这只是在哪里以及如何列出它们的问题。 我添加了另一种方式来写下你想做的事情。您应该将其包装在一个函数中以阐明它在做什么,因为从代码中看不出那么明显。而且我不知道它可能会对性能产生什么影响。

以上是关于如何从数组中提取某些值的主要内容,如果未能解决你的问题,请参考以下文章

如何在Javascript中从数组中提取值

如何从 lua 数组中提取值?

如何从混合数据类型数组中仅提取一个数据类型值?

如何从数据框中提取值以用于条件格式,同时一次将其应用于某些选择类别或数据条目?

如何在没有 Jmeter 中的 foreach 控制器的情况下从数组中提取值(通过 JSON 提取器获得)

vue循环提取对象数组中的某些值(方便自己以后看的)