php通过具有相同键的逗号值连接

php通过具有相同键的逗号值连接,php,Php,我希望能够通过具有相同键的逗号值进行连接 我有以下代码: Array ( [0] => Array ( [user123] => 50877214 ) [1] => Array ( [user123] => 7776057 ) [2] =&

我希望能够通过具有相同键的逗号值进行连接

我有以下代码:

Array
    (
        [0] => Array
            (
                [user123] => 50877214
            )
    
        [1] => Array
            (
                [user123] => 7776057
            )
    
        [2] => Array
            (
                [user456] => 53445145
            )
    
        [3] => Array
            (
                [user456] => 19487054
            )
    )
Array
    (
        [0] => Array
            (
                [user123] => "50877214,7776057",
            )

        [2] => Array
            (
                [user456] => "53445145,19487054",
            )
    )
$arr  = array_map(null, ...$arr);
$temp = array_map(function ($item) {
    return implode(",", $item);
}, $arr);
print_r($temp);die;
Array ( [0] => 50877214,7776057,53445145,19487054 )
我想将其转换为:

Array
    (
        [0] => Array
            (
                [user123] => 50877214
            )
    
        [1] => Array
            (
                [user123] => 7776057
            )
    
        [2] => Array
            (
                [user456] => 53445145
            )
    
        [3] => Array
            (
                [user456] => 19487054
            )
    )
Array
    (
        [0] => Array
            (
                [user123] => "50877214,7776057",
            )

        [2] => Array
            (
                [user456] => "53445145,19487054",
            )
    )
$arr  = array_map(null, ...$arr);
$temp = array_map(function ($item) {
    return implode(",", $item);
}, $arr);
print_r($temp);die;
Array ( [0] => 50877214,7776057,53445145,19487054 )
我的代码:

Array
    (
        [0] => Array
            (
                [user123] => 50877214
            )
    
        [1] => Array
            (
                [user123] => 7776057
            )
    
        [2] => Array
            (
                [user456] => 53445145
            )
    
        [3] => Array
            (
                [user456] => 19487054
            )
    )
Array
    (
        [0] => Array
            (
                [user123] => "50877214,7776057",
            )

        [2] => Array
            (
                [user456] => "53445145,19487054",
            )
    )
$arr  = array_map(null, ...$arr);
$temp = array_map(function ($item) {
    return implode(",", $item);
}, $arr);
print_r($temp);die;
Array ( [0] => 50877214,7776057,53445145,19487054 )
结果:

Array
    (
        [0] => Array
            (
                [user123] => 50877214
            )
    
        [1] => Array
            (
                [user123] => 7776057
            )
    
        [2] => Array
            (
                [user456] => 53445145
            )
    
        [3] => Array
            (
                [user456] => 19487054
            )
    )
Array
    (
        [0] => Array
            (
                [user123] => "50877214,7776057",
            )

        [2] => Array
            (
                [user456] => "53445145,19487054",
            )
    )
$arr  = array_map(null, ...$arr);
$temp = array_map(function ($item) {
    return implode(",", $item);
}, $arr);
print_r($temp);die;
Array ( [0] => 50877214,7776057,53445145,19487054 )

显然,不可能按键分组…

首先创建一个值为数组的关联数组。然后,您可以通过创建嵌套数组并使用
内爆()
以逗号连接,将其转换为所需的结果

$assoc = [];
foreach ($array as $nested) {
    foreach ($nested as $key => $value) {
        if (isset($assoc[$key])) {
            $assoc[$key][] = $value;
        } else {
            $assoc[$key] = [$value];
        }
    }
}

$result = [];
foreach ($assoc as $key => $value) {
    $result[] = [$key => implode(',', $value)];
}

实际上,我建议在第一步就停下来。具有不同键的数组通常很难使用(正如您已经发现的那样)。

有点晚了,尽管我认为这仍然有帮助

$data=[
[“user123”=>50877214],
[“user123”=>7776057],
[“user456”=>53445145],
[“user456”=>19487054]
];
$keys=[];
$result=[];
数组\u walk\u递归($data,function($value,$key)使用(&$keys,&$result){
如果(!in_数组($key,$key)){
$keys[]=$key;
$result[array_search($key,$keys)]=[$key=>”;
}
$result[array_search($key,$keys)][$key]。=$value.,”;
});
打印(结果);
/*
排列
(
[0]=>阵列
(
[user123]=>508772147776057,
)
[1] =>阵列
(
[user456]=>5344514519487054,
)
)
*/
补遗 否则,如果您只想将结果作为一个“展平”数组,下面的解决方案就可以做到这一点

$data=[
[“user123”=>50877214],
[“user123”=>7776057],
[“user456”=>53445145],
[“user456”=>19487054]
]; 
$keys=[];
$result=[];
数组\u walk\u递归($data,function($value,$key)使用(&$keys,&$result){
如果(!in_数组($key,$key)){
$keys[]=$key;
$result[$key]=“”;
}
$result[$key]。=$value.,”;
});
打印(结果);
/*
排列
(
[user123]=>508772147776057,
[user456]=>5344514519487054,
)
*/

这里也可以使用
数组\u reduce

$res = array_reduce($arr, function ($acc, $el) {
    $key = array_key_first($el);
    $acc[$key] .= ($acc[$key] ? ',':'') . $el[$key];
    return $acc;
}, $acc);
    
var_export($res);

结果:

array (
  'user123' => '50877214,7776057',
  'user456' => '53445145,19487054',
)

使用foreach和另一个循环遍历内部数组,以迭代键值对,
$key
,它是用户id(例如user123)。检查
$arr
中的
$key
是否第一次不存在,因此存储其值,第二次将存在,因此通过分隔符逗号累积其值

$array=[
[“user123”=>50877214],
[“user123”=>7776057],
[“user456”=>53445145],
[“user456”=>19487054]
];
$arr=[];
foreach($数组作为$inner){
foreach($key=>$value){
如果(数组\键\存在($key,$arr)){
$arr[$key]。=','.$value;
}否则{
$arr[$key]=$value;
}
}
}
回声'
不过,如果您希望对数组进行索引,只需执行另一个变量
$res
,循环执行
$arr
,并将其键值对存储到
$res

$res=[];
foreach($arr作为$key=>$value){
$res[]=[$key=>$value];
}
印刷品(港币);;
输出:


您尝试过的代码在哪里?您还面临哪些问题/错误?@B001ᛦ我刚刚添加了有关我的问题的更多详细信息
array\u map
仅适用于值。您是否尝试过一个无聊的旧
foreach
?是否每个嵌套数组只有一个键?您可以使用
array\u keys($element)[0]
获取该键。为什么要创建多维结果而不是单个关联数组?它工作得非常好,非常感谢♥