Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将值分组并将索引存储为逗号分隔的值_Php_Arrays_Concatenation_Grouping - Fatal编程技术网

Php 将值分组并将索引存储为逗号分隔的值

Php 将值分组并将索引存储为逗号分隔的值,php,arrays,concatenation,grouping,Php,Arrays,Concatenation,Grouping,我有以下数组: 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] =&

我有以下数组:

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也共享相同的值

更新:


我使用了以下方法,但没有成功实现我想要的,因为我的是平面阵列。我找到的答案只涉及多维数组。

首先,你应该组织一个中间数组,我称之为
$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);

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

代码:()


*如果有人发现此基本任务的副本,我将很乐意收回此答案。

创建一个关联数组,使用原始数组中的值作为键,并将键推送到值中的数组上。最后,您可以使用
array\u values()
将关联数组转换为索引数组。StackOverflow不是免费的编码服务。你应该会的。请更新您的问题,以显示您已在某个应用程序中尝试过的内容。有关更多信息,请参阅,并使用:)每当您发现自己键入“StackOverflow不是免费编码服务”时,这应该会提醒您downvote按钮及其鼠标悬停文本的重要性。@mickmackusa我刚刚投了更高的票,但在这样做之前,我们必须按照我们的接近理由进行处理。像这样的问题需要关闭,而不仅仅是否决。嘿,mickmackusa,你的回答不尊重预期的输出:)索引不同;)我已对输出重新编制了索引。没有理由手动重新循环结果数组。请不要将您的答案编辑为镜像我的答案——这只会浪费研究人员的时间。
$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));