基于数组参数聚合数组


aggregate array base on array parameters

我有一个数组数组,每个数组包含三个参数,如下所示:

Array
(
    [0] => Array
    (
        [title] => 'games'
        [transaction_id] => 102
        [order_id]=> a
    )
    [1] => Array
    (
        [title] => 'media'
        [transaction_id] => 95
        [order_id]=> b
    )
    [2] => Array
    (
        [title] => 'tv'
        [transaction_id] => 102
        [order_id]=> a
    )
    [3] => Array
    (
        [title] => 'jane'
        [transaction_id] => 42
        [order_id]=> a
    )
    [4] => Array
    (
        [title] => 'ads'
        [transaction_id] => 95
        [order_id]=> b
    )
    [5] => Array
    (
        [title] => 'movie'
        [transaction_id] => 95
        [order_id]=> c
    )
)   

我想组织数组,使每个具有相同transaction_id值和order_id的数组都位于原始array(Multidimensional)中的一个新数组下,如下所示:

Array
(
    [0] => Array
    (
        [0] => games
        [1] => tv
    )
    [1] => Array
    (
        [0] => jane
    )
    [2] => Array
    (
        [0] => ads
        [1] => media
    )
    [3] => Array
    (
        [0] => movie
    )
)

有什么好方法可以做到这一点?

我试过这个:

foreach ($conv_data as $obj) {
    if (empty($result[$obj[1]])) {
        $result[$obj[1]] = array($obj);
    } else {
        $result[$obj[1]][] = $obj;
    }
}

但这只是一个参数的总和。

使用事务id和订单id作为结果数组键来"合并"重复:

在线演示

$source=/* source array */;
function merge(array $source)
{
    $result=array();
    foreach($source as $node)
    {
        $key=$node["transaction_id"]."_".$node["order_id"];
        if(!empty($result[$key])) $result[$key][]=$node["title"];
        else $result[$key]=array($node["title"]);
    }
    return array_values($result);
}
print_r(merge($source));

最终结果:

Array
(
    [0] => Array
        (
            [0] => games
            [1] => tv
        )
    [1] => Array
        (
            [0] => media
            [1] => ads
        )
    [2] => Array
        (
            [0] => jane
        )
    [3] => Array
        (
            [0] => movie
        )
)

您可以在退货前将uksort发送到您想要的订单(如果您关心的话)。

$newarray = array();
foreach($arrays as $k=>$v){
    $newarray['transaction_id'] = $v['transaction_id'];
    $newarray['order_id'] = $v['order_id'];
    $newmulti[] = $newarray;
}
echo '<pre>';
print_r($newmulti);  

我希望它能帮助你