我有两个数组。
$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
当 的键$values
等于$keys
数组中的值之一时才会出现。
这个问题很难用语言来解释,所以我上面的问题就在下面的 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 )
我认为结合使用array_merge、array_combine、array_diff和/或array_unique应该是可能的,但我似乎无法找出解决方案。上面的 foreach 可能是最好的方法,但我可以想象必须有另一种很好的方法来做到这一点。所以我的问题基本上是:有没有另一种方法可以用更少的代码实现同样的目标?
我知道数组中存在哪些键$values
,但我必须以$values
一种很好的方式反映这些键。
$keys_in_values = array_intersect($keys, array_keys($values));
// Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 6 )
现在你可能会问为什么我不只是使用 foreach。嗯,答案很简单。因为我不想。我似乎 100% 正确,但我只是好奇是否有其他/更好的解决方案。我有一些更高级的代码片段,我想(递归地)使用它,但这对于这个问题来说有点太多了,因为答案是一样的。