php 数组若键相同,值合并

Sunshine白衬衫 2017-10-10 04:00:22
需求 将下列

array(
'aaa'=> array('a_ename' => '123','e_type' =>2),
'aaa'=> array('a_ename' => '456','e_type' =>21),
'bbb'=> array('a_ename' => '123','e_type' =>2),
'bbb'=> array('a_ename' => '123','e_type' =>212)
);


php 数组若键相同,值合并

将上列变为如下形式

array(
'aaa'=>array(
array('a_ename' => '123','e_type' =>2),
array('a_ename' => '456','e_type' =>21)
),
'bbb'=>array(
array('a_ename' => '123','e_type' =>2),
array('a_ename' => '123','e_type' =>212)
),
);
...全文
932 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sunshine白衬衫 2017-10-11
  • 打赏
  • 举报
回复
那最后结果应该是这样的,感谢。

header("Content-Type: text/html;charset=utf-8");
$arr = array(
  0 => array(
    "e_code" =>"aaa",
    "a_ename" =>  "KD",
    "e_api_type" =>"3",
  ),
  1 => array(
    "e_code" =>"aaa",
    "a_ename" =>"SFF",
    "e_api_type" =>"1",
  ),
  2 => array(
    "e_code" =>  "bbb", 
    "a_ename" =>  "STO",
    "e_api_type" =>"1",
  ),
  3 => array(
    "e_code" =>  "bbb",
    "a_ename" =>  "KD",
    "e_api_type" =>"2",
  ),
);
foreach($arr as $v) {
  if(!isset($res[$v['e_code']])) $res[$v['e_code']]=[];
  //$res[$v['e_code']] = array_merge($res[$v['e_code']], [$v['a_ename'] => $v['e_api_type']]);
  $res[$v['e_code']][$v['a_ename']] = $v['e_api_type'];
}
$str = var_export($res,true);
print_r($str);
Sunshine白衬衫 2017-10-11
  • 打赏
  • 举报
回复
不是直接输出(不是像 打印出来),是直接转换成 字符串
xuzuning 2017-10-11
  • 打赏
  • 举报
回复
您都不看手册的吗?真神人也
xuzuning 2017-10-10
  • 打赏
  • 举报
回复
print_r 换成 var_export
Sunshine白衬衫 2017-10-10
  • 打赏
  • 举报
回复

SELECT ec.express_code,GROUP_CONCAT(CONCAT(ac.api_ename,'=>',al.express_api_type)  order by al.level SEPARATOR"','") AS api_names FROM api_level al left join express_config as ec on al.express_code_id = ec.id left join api_config as ac on ac.id=al.api_conf_id WHERE ( al.status=1 ) group BY al.express_code_id
一个SQL解决了,开心
Sunshine白衬衫 2017-10-10
  • 打赏
  • 举报
回复
@xuzuning 生成像 数组那样的字符串,因为我要把它 写到 文件当中 向下面这样的。。。

<?php
Array (
        'aaa' => Array (
                        'KD' => 3 'SFF' => 1
                        ),
        'bbb' => Array (
                        'STO' => 1 'KD' => 2 
                        )
);
Sunshine白衬衫 2017-10-10
  • 打赏
  • 举报
回复
能不能直接 生成如下的配置文件啊。(因为我要把这个数组 写到配置文件当中) 数组强制转化成如下的字符串,不会转换。。。

<?php
Array (
		'aaa' => Array (
						'KD' => 3 'SFF' => 1
						),
		'bbb' => Array (
						'STO' => 1 'KD' => 2 
						)
);

xuzuning 2017-10-10
  • 打赏
  • 举报
回复
对原始数据中的每个元素,做如下操作 用 e_code 的值做键名 进行分类 将另两个键的值形成键值对附加其后 $res[$v['e_code']] = array_merge($res[$v['e_code']], [$v['a_ename'] => $v['e_api_type']]); 写作 $res[$v['e_code']][$v['a_ename']] = $v['e_api_type']; 可能容易理解些
Sunshine白衬衫 2017-10-10
  • 打赏
  • 举报
回复
@xuzuning 不好意思 再问一下。 循环里的思想 能大体 解释一下吗?没看懂
Sunshine白衬衫 2017-10-10
  • 打赏
  • 举报
回复
@xuzuning 的确 数据写错了,厉害。您对数组的理解 已经出神入化了,感谢!
xuzuning 2017-10-10
  • 打赏
  • 举报
回复
$arr = array(
  0 => array(
    "e_code" =>"aaa",
    "a_ename" =>  "KD",
    "e_api_type" =>"3",
  ),
  1 => array(
    "e_code" =>"aaa",
    "a_ename" =>"SFF",
    "e_api_type" =>"1",
  ),
  2 => array(
    "e_code" =>  "bbb",
    "a_ename" =>  "STO",
    "e_api_type" =>"1",
  ),
  3 => array(
    "e_code" =>  "bbb",
    "a_ename" =>  "KD",
    "e_api_type" =>"2",
  ),
);
foreach($arr as $v) {
  if(!isset($res[$v['e_code']])) $res[$v['e_code']]=[];
  $res[$v['e_code']] = array_merge($res[$v['e_code']], [$v['a_ename'] => $v['e_api_type']]);
}
print_r($res);

Array
(
    [aaa] => Array
        (
            [KD] => 3
            [SFF] => 1
        )

    [bbb] => Array
        (
            [STO] => 1
            [KD] => 2
        )

)
不过你的 array( 0 => array( "e_code" =>"aaa", "a_ename" => "KD", "es_api_type" =>"3", ), 写错了
Sunshine白衬衫 2017-10-10
  • 打赏
  • 举报
回复
上面的需求写错啦!不好意思!

array(
  0 => array(
    "e_code" =>"aaa",
    "a_ename" =>  "KD",
    "es_api_type" =>"3",
  ),
  1 => array(
    "e_code" =>"aaa",
    "a_ename" =>"SFF",
    "e_api_type" =>"1",
  ),
  2 => array(
    "e_code" =>  "bbb",
    "a_ename" =>  "STO",
    "e_api_type" =>"1",
  ),
  3 => array(
    "e_code" =>  "bbb",
    "a_ename" =>  "KD",
    "e_api_type" =>"2",
  ),
);
将上面的变为下面的(搞了半天,没搞出来)

array(
	'aaa'=> array('KD'=>'3','SFF'=>'1'),
	'bbb'=> array('STO'=>'1','KD'=>'2'),
);
Sunshine白衬衫 2017-10-10
  • 打赏
  • 举报
回复
@a541785600 确实,我再看看
Sunshine白衬衫 2017-10-10
  • 打赏
  • 举报
回复
@xuzuning 后面的 值把前面的覆盖了 你得到结果如下 Array ( [SF] => Array ( [0] => Array ( [SF] => 1 ) ) [STO] => Array ( [0] => Array ( [KDN] => 2 ) ) )
Sunshine白衬衫 2017-10-10
  • 打赏
  • 举报
回复
DD,上班啦
xuzuning 2017-10-10
  • 打赏
  • 举报
回复
怎么可能?
$arr = array(
'aaa'=>array(
	array('a_ename' => '123','e_type' =>2),
	array('a_ename' => '456','e_type' =>21)
	),
'bbb'=>array(
	array('a_ename' => '123','e_type' =>2),
	array('a_ename' => '123','e_type' =>212)
	),
);
foreach($arr as $k=>$v) $res[$k][] = $v;
print_r($res);

Array
(
    [aaa] => Array
        (
            [0] => Array
                (
                    [0] => Array
                        (
                            [a_ename] => 123
                            [e_type] => 2
                        )

                    [1] => Array
                        (
                            [a_ename] => 456
                            [e_type] => 21
                        )

                )

        )

    [bbb] => Array
        (
            [0] => Array
                (
                    [0] => Array
                        (
                            [a_ename] => 123
                            [e_type] => 2
                        )

                    [1] => Array
                        (
                            [a_ename] => 123
                            [e_type] => 212
                        )

                )

        )

)
Php辅物 2017-10-10
  • 打赏
  • 举报
回复
$a=array( 'aaa'=> array('a_ename' => '123','e_type' =>2), 'aaa'=> array('a_ename' => '456','e_type' =>21), 'bbb'=> array('a_ename' => '123','e_type' =>2), 'bbb'=> array('a_ename' => '123','e_type' =>212) ); print_r($a); 你的这个本来就有问题,数组不能这样的。会覆盖,你运行自己看看吧。你的写法就错了。
xuzuning 2017-10-10
  • 打赏
  • 举报
回复
foreach($arr as $k=>$v) $res[$k][] = $v;
$res 就是

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧