Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 按值数组的键组合键和值数组_Php_Arrays - Fatal编程技术网

Php 按值数组的键组合键和值数组

Php 按值数组的键组合键和值数组,php,arrays,Php,Arrays,我有两个数组 $keys = array(1,2,3,6,9); //note that 9 does not exist as key in the $values array $values = array('000', '001', '002', '003', '004', '005', '006', '007'); 我想做的是将这两个数组组合在一起,这样我将得到一个数组,该数组由$keys数组过滤。您可以说$values数组反映到$keys数组中,如果$values的键等于$keys数

我有两个数组

$keys = array(1,2,3,6,9); //note that 9 does not exist as key in the $values array
$values = array('000', '001', '002', '003', '004', '005', '006', '007');
我想做的是将这两个数组组合在一起,这样我将得到一个数组,该数组由
$keys
数组过滤。您可以说
$values
数组反映到
$keys
数组中,如果
$values
的键等于
$keys
数组中的一个值,则该数组返回一个过滤数组,其中只有
$values
出现

这个问题很难用语言来解释,因此与我上面的问题相同的是下面的foreach:

foreach ($keys as $k){
    if (!array_key_exists($k, $values)){ continue; } //prevents $k=9 as key in the $values array
    $new[$k] = $values[$k];
}
print_r($new); // Array ( [1] => 001 [2] => 002 [3] => 003 [6] => 006 )
我认为结合和/或应该是可能的,但我似乎无法找到解决方案。也许上面的foreach是实现这一点的最佳方法,但我可以想象,肯定还有另一种很好的方法。所以我的问题基本上是:有没有其他方法可以用更少的代码实现同样的目标

我知道
$values
数组中存在哪些键,但我必须以一种好的方式将这些键反映到
$values

$keys_in_values = array_intersect($keys, array_keys($values));
// Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 6 )

现在你可能会问我为什么不使用foreach。答案很简单。因为我不想。我似乎100%正确,但我只是好奇是否有其他/更好的解决方案。我有一些更高级的代码,我想(递归地)使用它,但这对于这个问题来说有点太多了,因为答案是一样的。

您需要的只是
array\u intersect\u key
+
array\u flip

$data = array_intersect_key($values, array_flip($keys));
var_dump($data);
输出

array (size=4)
  1 => string '001' (length=3)
  2 => string '002' (length=3)
  3 => string '003' (length=3)
  6 => string '006' (length=3)

您只需要
array\u intersect\u键
+
array\u flip

$data = array_intersect_key($values, array_flip($keys));
var_dump($data);
输出

array (size=4)
  1 => string '001' (length=3)
  2 => string '002' (length=3)
  3 => string '003' (length=3)
  6 => string '006' (length=3)

太棒了,这就是诀窍。我不知道
array\u intersect\u键的功能。显然,看手册看得太久会使函数消失:)太棒了,这就是诀窍。我不知道
array\u intersect\u键的功能。显然,看手册太久会使功能消失:)