【问题标题】:PHP compare associative arrays by specific valuePHP按特定值比较关联数组
【发布时间】:2014-10-24 18:17:32
【问题描述】:

我正在运行 2 个数据库,SQL 和 Mongo,当我向它们查询我需要的模型时,我将其转换为数组。

$sql = [1 => ["id" => 1, "num" => "123"], 2 => ["id" => 2, "num" => "456"]];
$mongo = ["id" => 1, "num" => "123"];

但有时我得到多个数组,有时我只能得到 1 个数组。

我想通过 "num" 值比较两个数组并删除差异数组(id 为 2)...

我希望得到一个关联数组的差异:

$result = [1 => ["id" => 2, "num" => "456"]];

有什么想法吗?

【问题讨论】:

  • 请提供比较的预期输出。
  • 您可以简单地对 $sql 数组进行 foreach 并使用 $mongo['num'] == $sql_item['num'] 删除值,但也许我没有正确理解这个问题

标签: php mysql arrays laravel-4


【解决方案1】:

天真我会尝试这样的事情(如果需要,应该优化比较):

$sql = (isset($sql['id']) ? array(1 => $sql) : $sql; // Always make multi-dimensionnal array
$mongo = (isset($mongo['id']) ? array(1 => $mongo) : $mongo; // Always make multi-dimensionnal array

$results = array();
foreach($sql as $sq)
    foreach($mongo as $mq)
        if ($sq['num'] != $mq['num'])
             $results[] = $mq;

编辑:使用php函数array_udiff的更好解决方案

$sql = (isset($sql['id']) ? array(1 => $sql) : $sql; // Always make multi-dimensionnal array
$mongo = (isset($mongo['id']) ? array(1 => $mongo) : $mongo; // Always make multi-dimensionnal array

$results = array_udiff($sql, $mongo, function($a, $b) { return $a['num'] - $b['num']; });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-17
    • 2012-05-03
    • 2015-06-24
    • 2023-03-08
    • 1970-01-01
    • 2018-06-22
    • 1970-01-01
    相关资源
    最近更新 更多