对值进行分组并将索引存储为逗号分隔值[重复]

问题描述 投票:0回答:2

我有以下数组:

Array
(
    [0] => 1
    [1] => 1
    [2] => 2
    [3] => 3
    [4] => 4
    [5] => 5
    [6] => 6
    [7] => 7
    [8] => 9
    [9] => 9
    [10] => 10
)

在上面的例子中存在各种重复的数字。

我希望输出如下:

 Array
    (
        [0] => 0,1
        [1] => 2
        [2] => 3
        [3] => 4
        [4] => 5
        [5] => 6
        [6] => 7
        [7] => 8,9
        [8] => 10

    )

我希望能够创建一个新数组并将原始数组中的键显示为第二个数组中的值。这意味着 0 和 1 具有相同的值,8 和 9 也具有相同的值。

更新:

我使用了以下问题,但我没有成功实现我想要的,因为我的是一个平面数组。我找到的答案仅涉及多维数组。

php arrays concatenation grouping
2个回答
0
投票

您需要迭代循环并检查是否正在处理给定值的第一次出现。 如果是这样,只需将新的键控元素推入结果集中。 如果没有,请使用串联将新值附加到相应键处的旧值。

代码:(演示

$array = [1, 1, 2, 3, 4, 5, 6, 7, 9, 9, 10];

$result = [];
foreach ($array as $index => $value) {
    if (!isset($result[$value])) {
        $result[$value] = $index;
    } else {
        $result[$value] .= ",$index";
    }
}
var_export(array_values($result));

*如果有人发现此基本任务的重复项,我将很乐意撤回此答案。


0
投票

首先,你应该组织一个中间数组,我称之为

$metaArray

$array = [1, 1, 2, 3, 4, 5, 6, 7, 9, 9, 10];
$metaArray = array();  
foreach( $array as $key => $value ){
    if (!isset($metaArray[$value])) {
        $metaArray[$value] = $key;
    } else {
        $metaArray[$value] .= ",$key";
    }
}

你会得到一个像这样的数组:

Array
(
    [1] => 0,1
    [2] => 2
    [3] => 3
    [4] => 4
    [5] => 5
    [6] => 6
    [7] => 7
    [9] => 8,9
    [10] => 10
)

$metaArray
中,您将值作为键,并将与该值关联的原始数组的键作为值。然后,如果您想生成精确的输出,您应该将元素放入
$results
:

$result = array();
foreach( $metaArray as $key => $value ){
  array_push($result, (string)$value);    
}

print_r($result);

您将获得以下内容,其中所有值都是字符串而不是数据类型的混合:

Array
(
    [0] => 0,1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
    [5] => 6
    [6] => 7
    [7] => 8,9
    [8] => 10
)

替代解决方案:如果您不需要将所有数据都作为字符串,请使用mickmausa建议的解决方案来计算

$result
,所以:

$result = array_values($metaArray);
© www.soinside.com 2019 - 2024. All rights reserved.