PHP Array Unique Sort Regular 未按预期工作

PHP Array Unique Sort Regular not working as expected

我在下面的数组上使用 print_r(array_unique($array, SORT_REGULAR));,但它不起作用。

我正在尝试过滤掉冗余数据。

注意[Order]和它的键值对都是一样的。但是 [Transaction] 和它的键值对是唯一的。

我需要获取 [Order] 元素数据并将其与 3 个不同的 [Transaction] 元素组合。

我的阵列

Array
(
    [0] => Array
        (
            [Order] => Array
                (
                    [PO] => TR11214
                    [OrderID] => 242856952012
                )

            [Transaction] => Array
                (
                    [TransPO] => TR11211
                    [TransactionPrice] => 91.17
                )

        )

    [1] => Array
        (
            [Order] => Array
                (
                    [PO] => TR11214
                    [OrderID] => 242856952012
                )

            [Transaction] => Array
                (
                    [TransPO] => TR11212
                    [TransactionPrice] => 180.41
                )

        )

    [2] => Array
        (
            [Order] => Array
                (
                    [PO] => TR11214
                    [OrderID] => 242856952012
                )

            [Transaction] => Array
                (
                    [TransPO] => TR11213
                    [TransactionPrice] => 209.99
                )

        )

)

我需要的最终数组看起来像这样。

Array
(
    [Order] => Array
        (
            [PO] => TR11214
            [OrderID] => 242856952012
        )

    [Transaction] => Array
        (
            [0] => Array
                (
                    [TransPO] => TR11211
                    [TransactionPrice] => 91.17
                )

            [1] => Array
                (
                    [TransPO] => TR11212
                    [TransactionPrice] => 180.41
                )

            [2] => Array
                (
                    [TransPO] => TR11213
                    [TransactionPrice] => 209.99
                )

        )

)

我可以展平原来的数组然后使用array_unique,但想看看是否有更好的方法来完成我需要的。

我的代码:

$myarray = array(
    0 => array(
    "Order" => array("PO" => "TR11214", "OrderID" => 242856952012),
    "Transaction" => array("TransPO" => "TR11211", "TransactionPrice" => 91.17)
    ),
    1 => array(
    "Order" => array("PO" => "TR11214", "OrderID" => 242856952012),
    "Transaction" => array("TransPO" => "TR11212", "TransactionPrice" => 180.41)
    ),
    2 => array(
    "Order" => array("PO" => "TR11214", "OrderID" => 242856952012),
    "Transaction" => array("TransPO" => "TR11213", "TransactionPrice" => 209.99)
    )
);


print_r(array_unique($myarray, SORT_REGULAR));

array_unique() 适用于一维数组。如果你想在多维数组上使用它,你应该考虑使用 usort() 代替。然后您需要手动反向遍历数组,搜索重复项并删除它们。

如果要确定数组中 Order 元素有多少个唯一值,则需要将 array_unique only 应用于Order 个元素,您可以使用 array_column:

$unique_orders = count(array_unique(array_column($myarray, 'Order'), SORT_REGULAR));

您可以使用具有非唯一值的键列表来处理您的数组以生成数组,而其他键将只有一个值:

$non_unique_keys = ['Transaction'];
$output = array();
foreach (array_keys($myarray[0]) as $key) {
    if (in_array($key, $non_unique_keys)) {
        $output[$key] = array_column($myarray, $key);
    }
    else {
        $output[$key] = $myarray[0][$key];
    }
}
print_r($output);

示例输出:

Array ( 
    [Order] => Array (
        [PO] => TR11214
        [OrderID] => 242856952012
    ) 
    [Sales Tax] => Array (
        [PO] => TR11214
        [SalesTaxAmount] => 0 
    )
    [Transaction] => Array (
        [0] => Array (
            [TransPO] => TR11211
            [TransactionPrice] => 91.17
        )
        [1] => Array (
            [TransPO] => TR11212
            [TransactionPrice] => 180.41
        )
        [2] => Array (
            [TransPO] => TR11213
            [TransactionPrice] => 209.99
        )
    )
)

Demo on 3v4l.org