【问题标题】:Filter array from big data collection of data [duplicate]从数据的大数据集合中过滤数组[重复]
【发布时间】:2020-02-12 19:53:36
【问题描述】:

我有 2 个数组,一个是键集合,另一个是数据集合。

$array1 = ['0'=>'A1','1'=>'A2','2'=>'A3']; 

$array2 = ['A1'=>'Data1','A2'=>'Data2','A3'=>'Data3','A4'=>'Data4','A5'=>'Data5']; 

我想要这样的数据

$array = ['A1'=>'Data1','A2'=>'Data2','A3'=>'Data3']

【问题讨论】:

  • 重复的最佳选择(恕我直言)是$output = array_intersect_key($array2, array_flip($array1))
  • 我只是在输入那个答案。同意奈杰尔。

标签: php


【解决方案1】:

您可以为此使用array_filter

$my_array = ['A1'=>'Data1','A2'=>'Data2','A3'=>'Data3','A4'=>'Data4','A5'=>'Data5'];
$allowed  = ['0'=>'A1','1'=>'A2','2'=>'A3']; 
$filtered = array_filter(
    $my_array,
    function ($key) use ($allowed) {
        return in_array($key, $allowed);
    },
    ARRAY_FILTER_USE_KEY
);

var_dump($filtered);

输出:

array(3) {
  ["A1"]=>
  string(5) "Data1"
  ["A2"]=>
  string(5) "Data2"
  ["A3"]=>
  string(5) "Data3"
}

演示:https://3v4l.org/ZvkJb

信用:PHP: How to use array_filter() to filter array keys?

【讨论】:

  • 您应该更新问题中的代码以匹配您的演示。事实上,问题中的内容是行不通的。
【解决方案2】:

你也可以试试这个来得到你在问题中提到的$array2的确切数据。

$array1 = ['0'=>'A1','1'=>'A2','2'=>'A3']; 
$array2 = ['A1'=>'Data1','A2'=>'Data2','A3'=>'Data3','A4'=>'Data4','A5'=>'Data5']; 
$ans = [];
foreach($array1 as $value)
{
    if(isset($array2[$value]))
        $ans[$value] = $array2[$value];
}
print_r($ans);

【讨论】:

    【解决方案3】:

    您可以将$array1 设为一个字典,然后检查$array2 中的密钥是否设置在该字典中。

    $array1 = array_flip($array1);
    $result = [];
    foreach($array2 as $k => $v){
        if(isset($array1[$k])){
            $result[$k] = $v;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-09
      • 2020-12-22
      • 1970-01-01
      • 2018-12-07
      • 2019-03-22
      • 1970-01-01
      • 2017-09-21
      • 1970-01-01
      相关资源
      最近更新 更多