使用爆炸或类似方法将数组中的相同值分组

Group same values in array using explode or similar method

我有这个字符串:

$a="house1,car1,phone1*house2,car2,phone2*house3,car1,phone3*house4,car3,phone3*";

我想按顺序展示,房子和同一辆车,因为你可以看到重复它的元素叫做 "car1"

我想要这个:

CAR 1 IN THIS HOUSE
    house1,car1,phone1
    house3,car1,phone3

CAR 2 AND  3 IN HOUSES 2 AND 4   
    house2,car2,phone2
    house4,car3,phone3

如您所见,car1在不同名称的2间房屋中重复出现,我想要这样的订单结果

我尝试以多种方式做到这一点,在带有爆炸和 array_intersect 的 foreach 循环中使用 array_diff、array_unique,结果非常糟糕

如果有人可以帮助我,谢谢,因为我不知道如何比较和显示结果,直到

提前致谢并问候社区

试试这个(在 php 5.6 中测试):

<?php

// input string
$a="house1,car1,phone1*house2,car2,phone2*house3,car1,phone3*house4,car3,phone3*";

// split on '*' to get tuples
$tuples = explode('*', $a);

// ignore empty tuples (trailing '*' in input string)
$tuples = array_filter($tuples);

// split each tuple on ',' to get individual values
function splitTuples($tuple) {
    return explode(',', $tuple);
}
$tuples = array_map('splitTuples', $tuples);

// sort tuples by the 2nd value
function sortArraysBySecondValue($a, $b) {
    if ($a[1] < $b[1]) {
        return -1;
    }
    if ($a[1] > $b[1]) {
        return 1;
    }
    return 0;
}
usort($tuples, 'sortArraysBySecondValue');

// print tuples
foreach ($tuples as $tuple) {
    echo implode(',', $tuple) . "\n";
}

输出为:

house1,car1,phone1
house3,car1,phone3
house2,car2,phone2
house4,car3,phone3