Php 计算数组交集,保留标题顺序?

Php 计算数组交集,保留标题顺序?,php,arrays,Php,Arrays,我有两个阵列: <?php $row = array( 'useless' => 42, 'useful' => 'orange', 'useful_also' => 'apples', 'useless_too' => 'banana', 'useful_too' => 'apples'); $header = array('useful_too', 'useful', 'useful_also'); 但是我想知道是否有一个没有fore

我有两个阵列:

<?php
$row = array(
  'useless' => 42,
  'useful' => 'orange',
  'useful_also' => 'apples',
  'useless_too' => 'banana',
  'useful_too' => 'apples');
$header = array('useful_too', 'useful', 'useful_also');
但是我想知道是否有一个没有foreach的解决方案。

试试这个

$row = array(
      'useless' => 42,
      'useful' => 'orange',
      'useful_also' => 'apples',
      'useless_too' => 'banana',
      'useful_too' => 'apples');
$header = array('useful_too', 'useful', 'useful_also');

$list  = array_flip($header);
$arr   = array_intersect_key(array_replace($list, $row), $list);
print_r($arr);

请看这里的问题:


看起来
array\u replace()
可以完成这项工作。

通常关联数组中条目的顺序并不重要。你为什么在乎?也许这里面有答案@Barmar:因为我要用它作为SplFileObject:的参数:fputcsv@MatthiasDunkel:哦,是的,
array\u replace
看起来可以完成这项工作。你为什么不写一个答案呢?
foreach
怎么会比一堆难以理解的
array.*
函数更不“优雅”呢?为什么要颠倒它呢?他想要的是
$header
中的特定顺序,而不仅仅是
$row
中的相反顺序。更新了我的答案@Barmari如果你只是想回答另一个问题,最好提交一份“接近重复”的推荐。@Barmar我怎么做?
<?php
$result = array();
foreach ($header as $key) {
    $result[$key] = $row[$key];
}
$row = array(
      'useless' => 42,
      'useful' => 'orange',
      'useful_also' => 'apples',
      'useless_too' => 'banana',
      'useful_too' => 'apples');
$header = array('useful_too', 'useful', 'useful_also');

$list  = array_flip($header);
$arr   = array_intersect_key(array_replace($list, $row), $list);
print_r($arr);