首页 > 解决方案 > 使用laravel中的对象值从多维数组中删除数组

问题描述

我需要从下面的数组中删除重复的数组。

第一个和第三个数组相同,只考虑“id”

$data = [
          [
              'id' => 'test_fun%test',
              'text' => 'test_fun',
              'data-value' => 'test',
          ],
          [
              'id' => 'test_fun1%test',
              'text' => 'test_fun1',
              'data-value' => 'test',
          ],
          [
              'id' => 'test_fun%test',
              'text' => 'test_fun',
              'data-value' => 'test',
              'selected' => true
          ]
    ];

我试图在下面的代码。

-> array_unique($data);

-> array_map("unserialize", array_unique(array_map("serialize", $data)));

预期产出

  $data = [
          
          [
              'id' => 'test_fun1%test',
              'text' => 'test_fun1',
              'data-value' => 'test',
          ],
          [
              'id' => 'test_fun%test',
              'text' => 'test_fun',
              'data-value' => 'test',
              'selected' => true
          ]
    ];

标签: phparrayslaravel

解决方案


array_unique"selected"由于您在第三个数组中,因此无法正常工作。我同意这很不清楚的评论,但对我来说,您似乎正在寻找自定义过滤规则,所以一个普通的旧foreach工具是这项工作的工具。

<?php

$data = [
    [
        'id' => 'test_fun%test',
        'text' => 'test_fun',
        'data-value' => 'test',
    ],
    [
        'id' => 'test_fun1%test',
        'text' => 'test_fun1',
        'data-value' => 'test',
    ],
    [
        'id' => 'test_fun%test',
        'text' => 'test_fun',
        'data-value' => 'test',
        'selected' => true
    ]
];

$filtered = [];
foreach ($data as $row) {
    $id = $row['id'];
    $selected = $row['selected'] ?? false;

    if (isset($filtered[$id])) {
        if (!$selected) {
            continue;
        }
        unset($filtered[$id]);
    }

    $filtered[$id] = $row;
}

// optional use if you don't want ids for keys
$filtered = array_values($filtered);


print_r($filtered);

推荐阅读