集群 PHP 消息数组

Cluster PHP messages array

我有以下情况,我正在接收这样的数组中的消息:

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

如您所见,代码不同,但消息相同。

鉴于此,我知道消息将保持不变,但我需要将代码聚集到 1 个数组中,我将如何处理那个?

请记住,我实际上是在对很多这样的消息进行 foreach 循环。

foreach( $ar as $array ){}

所以我必须整理 'cluster' 消息,我需要的输出是这样的:

$ar[0]['message'] = "TEST MESSAGE 1";
$ar[0]['code']    = array( 566666, 255555, 256323 );

谁能指导我正确的方法?

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

如果你想得到一个包含输入数组中所有代码的数组,你可以使用一个简单的映射函数:

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