【问题标题】:Compare multidimensional array with each other and some array field with external variable将多维数组相互比较,并将某些数组字段与外部变量进行比较
【发布时间】:2017-02-22 11:46:27
【问题描述】:

我有一个如下所示的数组。我需要相互比较并在第一个索引上返回匹配的数组,然后是其他的。

我们如何根据 id 和 scid 与 $scid 比较整个数组?

$scid = 307;
$array = array(
    0 =>
        array(
            'id' => '485',
            'scid' => 306
        ),
    1 =>
        array(
            'id' => '484',
            'scid' => null
        ),
    2 =>
        array(
            'id' => '486',
            'scid' => 305
        ),
    3 =>
        array(
            'id' => '485',
            'scid' => 307
        ),
    4 =>
        array(
            'id' => '485',
            'scid' => 309
        ),
    5 =>
        array(
            'id' => '485',
            'scid' => 329
        ),
);

结果数组应该是这样的

 array(3) { 
             [485]=> array(2) { ["id"]=> string(3) "485" ["scid"]=> int(307) } 
             [484]=> array(2) { ["id"]=> string(3) "484" ["scid"]=> NULL } 
             [486]=> array(2) { ["id"]=> string(3) "486" ["scid"]=> int(305) } 
        }

如果数组有重复的 id 而 scid 不匹配,那么我们可以选择任何 id 值。 注意:匹配的子数组应始终是结果数组的第一个索引。数量始终是唯一的,并且数组中也可能包含 null。

【问题讨论】:

  • 你已经完成了所有的分析。现在你只需要编写代码来完成它。
  • 重复 id 与哪个 scid 不匹配,然后我们可以选择任何 id 值 - 我们可以捕获第一个出现的值,对吗?喜欢[485]=> array(2) { ["id"]=> string(3) "485" ["scid"]=> int(306)(第一名485
  • 上述场景485匹配307,所以必须返回[485]=> array(2) { ["id"]=> string(3) "485" ["scid"] => 整数(307)。如果它没有那个匹配,那么它可以选择任何一个 id 为 485 的。另外,与 scid 匹配的那个应该总是在第一个索引中。
  • 我在stackoverflow.com/questions/12559878/…找到了解决方案,谢谢

标签: php arrays multidimensional-array


【解决方案1】:

你想要这样的东西吗?

$result = [];
foreach ($array as $item) {
    $result[$item['id']] = ['id' => $item['id'], 'scid' => $item['scid']];
}
var_dump($result);

【讨论】:

  • 不是真的,它与 $scid 变量没有任何比较。它只会删除重复但没有匹配 $scid 的数组。
  • 我有一个比较值的解决方案,但我不知道如何将匹配的子数组始终保持在顶部。 $scid=307; $结果 = []; for($i = 0; $i
【解决方案2】:

试试这个,

$temp = [];
    foreach($array as $k => $v){
        $temp[$v['id']][] = $v;
    }

试一试,会成功的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-25
    • 1970-01-01
    • 2018-06-28
    • 1970-01-01
    • 2015-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多