返回一个子集,对于给定的钥匙PHP阵列功能(PHP array function that retu

2019-07-31 19:32发布

我正在寻找一个阵列函数,它是这样的:

$myArray = array(
  'apple'=>'red',
  'banana'=>'yellow',
  'lettuce'=>'green',
  'strawberry'=>'red',
  'tomato'=>'red'
);
$keys = array(
  'lettuce',
  'tomato'
);

$ret = sub_array($myArray, $keys);

其中$ RET是:

array(
  'lettuce'=>'green',
  'tomato'=>'red'
);

一个由自己写下来都没有问题,事情是我想避免foreach循环,并通过内置的功能或组合的内置功能。 在我看来,像一般的,共同的数组运算 - 我会感到惊讶,如果一个循环是唯一的选择。

Answer 1:

这工作:

function sub_array(array $haystack, array $needle)
{
    return array_intersect_key($haystack, array_flip($needle));
}

$myArray = array(
    'apple'=>'red',
    'banana'=>'yellow',
    'lettuce'=>'green',
    'strawberry'=>'red',
    'tomato'=>'red'
);
$keys = array(
    'lettuce',
    'tomato'
);

$ret = sub_array($myArray, $keys);

var_dump($ret);


Answer 2:

您可以使用array_intersect_key,但它使用与键和值第二阵列。 它计算使用按键用于比较数组的交集

array_intersect_key

<?php
$array1 = array('blue'  => 1, 'red'  => 2, 'green'  => 3, 'purple' => 4);
$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan'   => 8);
$array3 = array('green' => '', 'blue' => '', 'yellow' => '', 'cyan' => '');
$array4 = array('green', 'blue', 'yellow', 'cyan');

var_dump(array_intersect_key($array1, $array2));
var_dump(array_intersect_key($array1, $array3));
var_dump(array_intersect_key($array1, $array4));
?>

上面的例子将输出:

array(2) {
  ["blue"]=>
  int(1)
  ["green"]=>
  int(3)
}

array(2) {
  ["blue"]=>
  int(1)
  ["green"]=>
  int(3)
}

array(0) {
}


Answer 3:

  $ret = array_filter($myArray, function ($key) { return in_array($key, $keys); }, ARRAY_FILTER_USE_KEY); 


文章来源: PHP array function that returns a subset for given keys