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));