【问题标题】:Group same values in array using explode or similar method使用explode或类似方法对数组中的相同值进行分组
【发布时间】:2017-12-11 18:14:48
【问题描述】:

我有这个字符串:

$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,结果很糟糕

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

感谢社区的先进和问候

【问题讨论】:

标签: php arrays sorting explode


【解决方案1】:

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

【讨论】:

  • Give me error in line 13 或多或少地给出这个 Parse 错误:语法错误,意外的 T_FUNCTION,期待 ')',问候和感谢
  • 我已经更新了旧版本 php 的答案,这些旧版本在 usort 中不能使用匿名函数
  • 不理解但继续错误解析错误:语法错误,意外的 T_FUNCTION,在第 13 行的 tester.php 中期待 ')'
  • 请问您使用的是哪个版本的php?
  • 我再次更新了答案,从array_map中删除了匿名函数调用
猜你喜欢
  • 2018-01-14
  • 2011-01-11
  • 1970-01-01
  • 2011-01-14
  • 2012-04-12
  • 1970-01-01
  • 2016-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多