使用爆炸或类似方法将数组中的相同值分组
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
我有这个字符串:
$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