【问题标题】:PHP - Object Array Intersect and Merge keeping object intactPHP - 对象数组相交和合并保持对象完整
【发布时间】:2018-10-01 16:26:14
【问题描述】:

我有一个多维数组,其中包含从 DB 返回的对象数组:

大批 ( [0] => 数组 ( [0] => 标准类对象 ( [image_id] => 1 ) [1] => 标准类对象 ( [image_id] => 5 ) [2] => 标准类对象 ( [image_id] => 6 ) [3] => 标准类对象 ( [image_id] => 7 ) ) [1] => 数组 ( [0] => 标准类对象 ( [image_id] => 5 ) [1] => 标准类对象 ( [image_id] => 6 ) ) [2] => 数组 ( [0] => 标准类对象 ( [image_id] => 5 ) ) )

我需要能够与嵌套数组相交以仅保留所有数组集中存在的 image_id。所以在上面的例子中,这只会返回 image_id = 5。

我需要将它保存为一个对象数组,如下所示:

大批 ( [0] => 标准类对象 ( [image_id] => 5 ) )

我尝试了其他帖子中的一些代码。这与php - array intersect and merge 类似,但他们正在尝试删除重复项,但情况略有不同。

我看到的所有比较数组的情况都是已知数组的情况(即 $arr1、$arr2)。用户案例可以是任意长度的多数组。

任何帮助都将不胜感激,因为他们一直在寻找解决方案。

提前致谢

【问题讨论】:

  • 您是否尝试过自己编写所需的代码,而不是尝试查找其他人编写的代码
  • 你用的是什么版本的php?
  • 我在本地运行 5.5 - 这将位于可能有更新版本的新服务器上

标签: php arrays object multidimensional-array


【解决方案1】:

首先,我们需要遍历 image_ids 并获取重复的那些。然后我们需要重建所需的结构。

<?php

$test_array = [
    [
        (object)['image_id' => 1],
        (object)['image_id' => 2],
        (object)['image_id' => 3],
        (object)['image_id' => 4],
        (object)['image_id' => 5],
    ],
    [
        (object)['image_id' => 2],
        (object)['image_id' => 3],
    ],
    [
        (object)['image_id' => 1],
        (object)['image_id' => 2],
        (object)['image_id' => 3],
    ]
];


$first_iteration = true;
$duplicates = [];

foreach ($test_array as $outer_key => $outer_array) {

    $current_array_values = [];
    foreach ($outer_array as $image_id) {
        $current_array_values[] = $image_id->image_id;
    }

    // If first iteration, then we will have
    // no IDs to check against.
    if ($first_iteration) {
        $duplicates = $current_array_values;
        $first_iteration = false;
    } else {
        $duplicates = array_intersect($duplicates, $current_array_values);
    }   
}

$output = [];
foreach($duplicates as $duplicate) {
    $output[] = (object)['image_id' => $duplicate];
}

$输出:

array(2) {
  [0]=>
  object(stdClass)#11 (1) {
    ["image_id"]=>
    int(2)
  }
  [1]=>
  object(stdClass)#12 (1) {
    ["image_id"]=>
    int(3)
  }
}

如果您有任何问题,请告诉我。

【讨论】:

  • 谢谢...我现在就试试看,看看效果如何
  • 所有测试和工作完美。感谢您的帮助 mkveksas
  • @swood 我的荣幸!
猜你喜欢
  • 2012-01-07
  • 1970-01-01
  • 2016-09-10
  • 2011-02-19
  • 1970-01-01
  • 1970-01-01
  • 2017-12-12
  • 2010-10-10
  • 1970-01-01
相关资源
最近更新 更多