我有以下情况,我在这样的数组中接收消息:
$ar[0]['message'] = "TEST MESSAGE 1";
$ar[0]['code'] = 566666;
$ar[1]['message'] = "TEST MESSAGE 1";
$ar[1]['code'] = 255555;
$ar[2]['message'] = "TEST MESSAGE 1";
$ar[2]['code'] = 256323;
正如您所看到的,代码是不同的,但消息是相同的。
这一点,我知道消息会保持不变,但是我需要将代码集成到一个数组中,我怎么去做那个呢?
请记住,我实际上正在对很多这样的消息做一个foreach循环。
foreach( $ar as $array ){}
所以我必须对消息进行排序'集群',我需要的输出是这样的:
$ar[0]['message'] = "TEST MESSAGE 1";
$ar[0]['code'] = array( 566666, 255555, 256323 );
有人能以正确的方式指导我吗?
答案 0 :(得分:1)
$result = [];
foreach ($ar as $item) {
$result[$item['message']][] = $item['code'];
}
$result = array_map(
function ($message, $code) { return compact('message', 'code'); },
array_keys($result),
$result
);
答案 1 :(得分:1)
如果你想获得一个包含输入数组中所有代码的数组,你可以使用一个简单的映射函数:
function mapping($x) {
return $x['code'];
}
$codes = array_map(mapping, $ar);
或作为一个班轮:
$codes = array_map(function($x) { return $x['code'];}, $ar);
有了它,我认为实施完整的解决方案很简单。
也许这样的功能:
function groupCodes($ar) {
return array (
'message'=> $ar[0]['message'],
'code' => array_map(function($x) { return $x['code'];}, $ar)
);
}
此函数从数组的第一个元素获取消息 将所有元素的代码分组为结果数组。
如果您希望过滤代码,可以使用array_filter,或在映射闭包中使用简单的if。
参考文献:
http://php.net/manual/en/function.array-map.php
http://php.net/manual/en/function.array-filter.php
答案 2 :(得分:0)
您需要使用注释元素将它们组合在一起。
$ar[0]['message'] = "TEST MESSAGE 1";
$ar[0]['code'] = 566666;
$ar[1]['message'] = "TEST MESSAGE 1";
$ar[1]['code'] = 255555;
$ar[2]['message'] = "TEST MESSAGE 1";
$ar[2]['code'] = 256323;
$grouped = [];
foreach($ar as $row) {
$grouped[$row['message']]['message'] = $row['message'];
$grouped[$row['message']]['code'][] = $row['code'];
}
$ar = array_values($grouped);