如何从数组中提取某些值
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 ]);我只是想获得更短的代码。 如果除了索引之外你不能指定哪些元素是相关的,你最终将不得不枚举所有索引来进行提取。这只是在哪里以及如何列出它们的问题。 我添加了另一种方式来写下你想做的事情。您应该将其包装在一个函数中以阐明它在做什么,因为从代码中看不出那么明显。而且我不知道它可能会对性能产生什么影响。以上是关于如何从数组中提取某些值的主要内容,如果未能解决你的问题,请参考以下文章
如何从数据框中提取值以用于条件格式,同时一次将其应用于某些选择类别或数据条目?