PHP如何对值相同的多维数组进行分组

PHP如何对值相同的多维数组进行分组,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,希望我能正确地解释这一点 我有一个多维数组得到了这个数组结果: Array ( [0] => Array ( [subscription_plan_id] => 36 [transactionID] => WU3E5YRHHKMKMM3ZLLSJMNUWJM [property_id] => 1026 [plan_name] => One Mont

希望我能正确地解释这一点

我有一个多维数组得到了这个数组结果:

Array
(
    [0] => Array
        (
            [subscription_plan_id] => 36
            [transactionID] => WU3E5YRHHKMKMM3ZLLSJMNUWJM
            [property_id] => 1026
            [plan_name] => One Month
            [plan_month] => 1
            [start_date] => 2015-02-10 14:58:32
            [end_date] => 2015-03-10
            [active] => 1
            [parent_id] => 27
        )

    [1] => Array
        (
            [subscription_plan_id] => 17
            [transactionID] => WU3E5YRHHKMKMM3ZLLSJMNUWJM
            [property_id] => 1026
            [plan_name] => 1 Realistic Photo
            [plan_month] => 1
            [start_date] => 2015-02-10 14:58:32
            [end_date] => 2015-03-10
            [active] => 1
            [parent_id] => 16
        )

    [2] => Array
        (
            [subscription_plan_id] => 15
            [transactionID] => WU3E5YRHHKMKMM3ZLLSJMNUWJM
            [property_id] => 1026
            [plan_name] => Six months - at least twenty-four golden lists
            [plan_month] => 6
            [start_date] => 2015-02-10 14:58:32
            [end_date] => 2015-08-10
            [active] => 1
            [parent_id] => 12
        )

    [3] => Array
        (
            [subscription_plan_id] => 9
            [transactionID] => WU3E5YRHHKMKMM3ZLLSJMNUWJM
            [property_id] => 1025
            [plan_name] => One month
            [plan_month] => 1
            [start_date] => 2015-02-10 14:58:32
            [end_date] => 2015-03-10
            [active] => 1
            [parent_id] => 5
        )

    [4] => Array
        (
            [subscription_plan_id] => 3
            [transactionID] => WU3E5YRHHKMKMM3ZLLSJMNUWJM
            [property_id] => 1025
            [plan_name] => Three months
            [plan_month] => 3
            [start_date] => 2015-02-10 14:58:32
            [end_date] => 2015-05-10
            [active] => 1
            [parent_id] => 1
        )
)
我想按
属性\u id
键进行分组:

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [subscription_plan_id] => 36
                    [transactionID] => WU3E5YRHHKMKMM3ZLLSJMNUWJM
                    [property_id] => 1026
                    [plan_name] => One Month
                    [plan_month] => 1
                    [start_date] => 2015-02-10 14:58:32
                    [end_date] => 2015-03-10
                    [active] => 1
                    [parent_id] => 27
                )

            [1] => Array
                (
                    [subscription_plan_id] => 17
                    [transactionID] => WU3E5YRHHKMKMM3ZLLSJMNUWJM
                    [property_id] => 1026
                    [plan_name] => 1 Realistic Photo
                    [plan_month] => 1
                    [start_date] => 2015-02-10 14:58:32
                    [end_date] => 2015-03-10
                    [active] => 1
                    [parent_id] => 16
                )

            [2] => Array
                (
                    [subscription_plan_id] => 15
                    [transactionID] => WU3E5YRHHKMKMM3ZLLSJMNUWJM
                    [property_id] => 1026
                    [plan_name] => Six months - at least twenty-four golden lists
                    [plan_month] => 6
                    [start_date] => 2015-02-10 14:58:32
                    [end_date] => 2015-08-10
                    [active] => 1
                    [parent_id] => 12
                )

    [1] => Array
        (
            [0] => Array
                (
                    [subscription_plan_id] => 9
                    [transactionID] => WU3E5YRHHKMKMM3ZLLSJMNUWJM
                    [property_id] => 1025
                    [plan_name] => One month
                    [plan_month] => 1
                    [start_date] => 2015-02-10 14:58:32
                    [end_date] => 2015-03-10
                    [active] => 1
                    [parent_id] => 5
                )

            [1] => Array
                (
                    [subscription_plan_id] => 3
                    [transactionID] => WU3E5YRHHKMKMM3ZLLSJMNUWJM
                    [property_id] => 1025
                    [plan_name] => Three months
                    [plan_month] => 3
                    [start_date] => 2015-02-10 14:58:32
                    [end_date] => 2015-05-10
                    [active] => 1
                    [parent_id] => 1
                )

        )
)
有什么想法吗?如何做到这一点

谢谢

大致如下:

$groupedItems = array();

foreach($data as $item)
{
    $groupedItems[$item['property_id']][] = $item;
}

// See @Lepanto's comment below, this resets the keys to match output OP required: 
$groupedItems = array_values($groupedItems);
大致如下:

$groupedItems = array();

foreach($data as $item)
{
    $groupedItems[$item['property_id']][] = $item;
}

// See @Lepanto's comment below, this resets the keys to match output OP required: 
$groupedItems = array_values($groupedItems);

最好使用
函数()
以备将来重新使用:

/**
 *
 * Group sub-arrays ( of multidimensional array ) by certain key
 * @return array
 *
 */
function array_multi_group_by_key($input_array, $key, $remove_key = false, $flatten_output = false)
{
    $output_array = [];
    foreach ($input_array as $array) {
        if ($flatten_output) {
            $output_array[$array[$key]] = $array;
            if ($remove_key) {
                unset($output_array[$array[$key]][$key]);
            }
        } else {
            $output_array[$array[$key]][] = $array;
            if ($remove_key) {
                unset($output_array[$array[$key]][0][$key]);
            }
        }
    }
    return $output_array;
}
我在几周前为我的项目写的,它被证明工作得很好。您不必使用
$remove\u键
展平\u输出

用法:

var_dump(array_multi_group_by_key($input_array, 'property_id'));

最好使用
函数()
以备将来重新使用:

/**
 *
 * Group sub-arrays ( of multidimensional array ) by certain key
 * @return array
 *
 */
function array_multi_group_by_key($input_array, $key, $remove_key = false, $flatten_output = false)
{
    $output_array = [];
    foreach ($input_array as $array) {
        if ($flatten_output) {
            $output_array[$array[$key]] = $array;
            if ($remove_key) {
                unset($output_array[$array[$key]][$key]);
            }
        } else {
            $output_array[$array[$key]][] = $array;
            if ($remove_key) {
                unset($output_array[$array[$key]][0][$key]);
            }
        }
    }
    return $output_array;
}
我在几周前为我的项目写的,它被证明工作得很好。您不必使用
$remove\u键
展平\u输出

用法:

var_dump(array_multi_group_by_key($input_array, 'property_id'));

您可以使用数组\多排序


您可以使用数组\多排序


若这些数据来自数据库,则看起来像是按订阅计划id排序的。
如果是这样,您可以尝试对其重新排序,或者设置
按属性排序\u id

如果这些数据来自数据库,看起来像是按
订阅计划\u id
排序。 如果是这样,您可以尝试对其重新排序或按属性设置顺序。\u id

尝试以下功能:

function group_multidim_array($my_array, $group_by){
    $o = array();
    foreach($my_array as $subarray){
        if(!is_array($subarray)){ continue; }
        if(!isset($subarray[$group_by])) $subarray[$group_by] = group_multidim_array($subarray, $group_by); // recursive
        if(!empty($subarray[$group_by])) $o[$subarray[$group_by]][] = $subarray;
    }
    return $o;
}
你这样称呼它:

$groupped_array = group_multidim_array($my_array, 'property_id');
$groupped_array = array_values($groupped_array);
如果需要索引数组,可以执行以下操作:

$groupped_array = group_multidim_array($my_array, 'property_id');
$groupped_array = array_values($groupped_array);
希望它有帮助…

尝试此功能:

function group_multidim_array($my_array, $group_by){
    $o = array();
    foreach($my_array as $subarray){
        if(!is_array($subarray)){ continue; }
        if(!isset($subarray[$group_by])) $subarray[$group_by] = group_multidim_array($subarray, $group_by); // recursive
        if(!empty($subarray[$group_by])) $o[$subarray[$group_by]][] = $subarray;
    }
    return $o;
}
你这样称呼它:

$groupped_array = group_multidim_array($my_array, 'property_id');
$groupped_array = array_values($groupped_array);
如果需要索引数组,可以执行以下操作:

$groupped_array = group_multidim_array($my_array, 'property_id');
$groupped_array = array_values($groupped_array);

希望它能帮助…

可能重复的可能重复的获取此错误的可能重复:
语法错误意外的'eof'期望']'
@Mr.Happy上述代码似乎没有问题。检查codeNow代码中是否遗漏了任何关闭
]
,但如何将此数组键
[1026][1025]
更改为此
[0][1]
。我需要重置
proerty\u id
key.@Mr.Happy您可以使用
$groupedItems=array\u值($groupedItems)来执行此操作在foreach之后。Check@Lepanto Thank更新了我的答案以包含完整的代码获取此错误:
语法错误意外的“eof”预期为“]”
@Mr.Happy上述代码似乎没有问题。检查codeNow代码中是否遗漏了任何关闭
]
,但如何将此数组键
[1026][1025]
更改为此
[0][1]
。我需要重置
proerty\u id
key.@Mr.Happy您可以使用
$groupedItems=array\u值($groupedItems)来执行此操作在foreach之后。检查@Lepanto Thank更新了我的答案,以包含完整的代码