【问题标题】:Filter array by array of keys [duplicate]按键数组过滤数组[重复]
【发布时间】:2012-09-23 07:28:20
【问题描述】:

可能重复:
PHP Built-in Method to Get Array Values Given a List of Keys

PHP 是否有针对此目的的内置函数?

我有两个数组,第一个与一些数据相关联。例如:

$data = array(
    'name'      => 'John',
    'last_name' => 'Smith',
    'address'   => 'NY, ...',
    'phone'     => '1234567'
);

还有另一个带键的数组:

$keys = array(
    'name', 
    'last_name'
);

应用此函数后,我只从第一个数组中获取值,其中的键来自第二个数组。

$result = function($data, $keys);
print_r($result);

// array(
//    'name'      => 'Jonh',
//    'last_name' => 'Smith'
// )

【问题讨论】:

标签: php arrays filtering


【解决方案1】:

试试下面的:

$result = array_intersect_key($data, array_fill_keys($keys, null));

【讨论】:

    【解决方案2】:
     $data = array(
          'name'      => 'John',
          'last_name' => 'Smith',
          'address'   => 'NY, ...',
          'phone'     => '1234567'
      );
    
      $keys = array('name', 'last_name');
    
     print_r(array_intersect_key($data, array_flip($keys)));
    

    【讨论】:

    • 注意评论你的代码,解释你为什么提出这个sn-p
    • @Yaroslav 我提出了这个 sn-p 因为它打印出所需的数组并因此解决了问题。 StackOverflow 不是关于这个的吗?为什么投反对票 - 我错过了什么?
    • Steffen,是的,SO 是关于编码的,有些代码总比没有好。但是,如果您评论您的代码,它将对 OP 或任何其他未来的访问者更加有用,他们将对它有更好的理解。检查此metaSO questionJon Skeet: Coding Blog,了解如何给出正确答案。而对于downvote,它是匿名的,所以我不能告诉你谁不赞成,但肯定不是我的;)
    • @Yaroslav 是的,为了使我的评论与接受和赞成的答案一样完整,我应该添加一个“尝试下面的代码”(以确保读者知道这不是“不要试试下面的”或“忽略这个帖子,里面没有答案”)。您提到的文章指出“代码为王-确保它可以编译”和“没有解释的代码很少有用”。我的可以运行。由于 OP 只是询问了一个具体函数的名称,我实际上认为这里的评论可以忽略不计。不同意见。当正确的答案不被尊重而是被贬低时,我感到很难过。
    • 我不能尝试代码,我不是 php 开发人员,所以我不能反对反对你已经拥有的反对票,因为我不知道你的代码是否编译。例如,如果您有一些 cmets,我可以更好地了解您在做什么以及您是如何做的,然后我会想“好吧,我无法尝试代码,但推理是正确的,让我点赞”。最后但并非最不重要。是的,接受的答案只有一个“试试下面”。那你就不评论了?就因为别人不评论?
    猜你喜欢
    • 2018-07-17
    • 2016-10-03
    • 1970-01-01
    • 2010-12-08
    • 2016-12-30
    • 1970-01-01
    • 2022-01-16
    • 2016-12-22
    • 1970-01-01
    相关资源
    最近更新 更多