【问题标题】:Return only array values which it's keys are in another array [duplicate]仅返回其键位于另一个数组中的数组值[重复]
【发布时间】:2013-03-20 11:11:46
【问题描述】:

我有两个数组,看起来像:

$fields = array('id', 'name', 'city', 'birthday', 'money');

$values = array('id' => 10,    
    'name' => 'Jonnas',   
    'anotherField' => 'test',
    'field2' => 'aaa',
    'city' => 'Marau', 
    'field3' => 'bbb',
    'birthday' => '0000-00-00',
    'money' => 10.95
);

是否有 PHP 内置函数可以检索仅由 $fields 数组 (id, name, city, birthday, money) 上指定的键填充的数组?

我期望的回报是这样的:

$values2 = array(
    'id' => 10,
    'name' => 'Jonnas',
    'city' => 'Marau',
    'birthday' => '0000-00-00',
    'money' => 10.95
);

P.S.:我只是在寻找一个内置函数。

【问题讨论】:

标签: php arrays


【解决方案1】:
$values2 = array_intersect_key($values, array_flip($fields));

如果必须始终按$fields 的顺序返回键,请改用简单的foreach 循环:

$values2 = array();
foreach ($fields as $field) {
    $values2[$field] = $values[$field];
}

【讨论】:

  • 我的真实数组有浮点值,所以array_flip函数会引发以下错误:“只能翻转STRING和INTEGER值!”
  • @fonini:在您的示例中,$fields 数组没有浮点值。
  • @FelixKling 很抱歉
  • @fonini:好吧,提供一个合适的例子。如果$fields 真的是一个键数组,那么值(字段/键)怎么可能是浮点数?正如您已经注意到的,浮点值不能是键。
  • @fonini:这不会改变 $fields 数组的任何内容。我认为您将array_flip 应用于错误的数组。鉴于您问题中的示例,这个答案会很好。
【解决方案2】:

array_intersect_key — Computes the intersection of arrays using keys for comparison

<?php
$fields = array('id', 'name', 'city', 'birthday');

$values = array('id' => 10,    
    'name' => 'Jonnas',   
    'anotherField' => 'test',
    'field2' => 'aaa',
    'city' => 'Marau', 
    'field3' => 'bbb',
    'birthday' => '0000-00-00'
);

var_dump(array_intersect_key($fields, array_flip($values)));
?>

【讨论】:

  • 我发布答案有点晚了......
  • 你还需要翻转字段...
  • +1 用于快速更正 ...
  • @AdvaitAmin 支持它。谢谢。
猜你喜欢
  • 2021-06-15
  • 1970-01-01
  • 2022-06-22
  • 2018-02-13
  • 2021-05-12
  • 1970-01-01
  • 2015-07-23
  • 1970-01-01
  • 2020-03-30
相关资源
最近更新 更多