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

时间:2017-12-11 18:14:48

标签: php arrays sorting explode

我有这个字符串:

$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个不同名称的房屋中重复,我希望以这种方式订购结果

我尝试以多种方式执行此操作,在foreach循环中使用array_diff,array_unique,使用explode和array_intersect,结果非常糟糕

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

感谢先进和关心社区

1 个答案:

答案 0 :(得分:0)

试试这个(在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