我有以下情况,我在这样的数组中接收消息:
$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 );
有谁能给我指路吗? 如果您想获得一个包含所有输入数组中的代码的数组,您可以使用一个简单的映射函数:
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
$result = [];
foreach ($ar as $item) {
$result[$item['message']][] = $item['code'];
}
$result = array_map(
function ($message, $code) { return compact('message', 'code'); },
array_keys($result),
$result
);
您需要使用注释元素(即消息)将它们组合在一起。
$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);