【问题标题】:PHP match arrayPHP匹配数组
【发布时间】:2022-01-14 16:55:39
【问题描述】:

我怎样才能实现在每个列表中存在一次的所有匹配电子邮件的目标,返回 first_name、last_name、cc_number 和电子邮件。

我有两个 json 文件,这里是例子

email_names.json

[
{"id":2,
"first_name":"Felicdad",
"last_name":"Vasile",
"email":"fvasile1@unesco.org"},

{"id":3,
"first_name":"Anni",
"last_name":"Meineken",
"email":"ameineken2@google.com.br"},
]

email_numbers.json

[
{"id":10,
"email":"bcutts9@xing.com",
"cc_number":"3568450618074657"},

{"id":11,
"email":"amonellia@salon.com",
"cc_number":"3585713228090002"},
]

我尝试的是这样的,但我认为它不合适,这就是我在这里问的原因。谢谢

foreach ($email_numbers as $d){
    foreach($email_names as $a){
        if($d['email'] == $a['email']){
            echo 'Match';
            // die();
        }else{
            echo 'No match'. PHP_EOL;
            // die();
        }
    }
}

【问题讨论】:

  • 您有 2 个数组(假设您从 .json 文件中创建了数组),并在循环中比较电子邮件地址。如果有匹配项,您可以从任一数组中获取所需的值。我唯一没有看到的是cc_number 的值你在寻找不同的方法吗?
  • 我更新了 @Thefourthbird 先生

标签: php arrays loops data-structures


【解决方案1】:

反复循环是一种方法。另一种可能更优雅的方法是简单地获取电子邮件列并将它们相交,然后收集匹配项。如下:

// Decode JSON:
$users_one = json_decode($json_one, true);
$users_two = json_decode($json_two, true);

// Get Email Columns:
$mails_one = array_column($users_one, 'email');
$mails_two = array_column($users_two, 'email');

// Get Intersection:
$diff = array_intersect($mails_one, $mails_two);

// Filter out duplicates:
$diff = array_unique($diff);

// Collect Matches by ID from First Set
$matches = [];
foreach($diff as $id => $mail) {
    $matches[] = $users_one[$id];
}

print_r($matches);

结果:

Array
(
    [0] => Array
        (
            [id] => 2
            [first_name] => Felicdad
            [last_name] => Vasile
            [email] => fvasile1@unesco.org
        )

    [1] => Array
        (
            [id] => 3
            [first_name] => Anni
            [last_name] => Meineken
            [email] => ameineken2@google.com.br
        )

)

我显然在您的列表中添加了两个重叠部分。演示:Intersect Two 2-D Arrays by Email Key

【讨论】:

  • 您好,很抱歉,但两个 json 有不同的字段。我需要从另一个 json 中获取 cc_number。他们不一样
  • 对方法有所不同的权利。你不只是发布实际的 CC 号码吗?!
  • 是的。我忘了我粘贴了相同的json。很抱歉。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-09
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 2011-07-10
  • 2014-02-08
  • 1970-01-01
相关资源
最近更新 更多