реструктурировать массив в php - PullRequest
0 голосов
/ 18 августа 2011

У меня есть следующий исходный массив, который я пытаюсь реструктурировать, используя имя_группы, чтобы получить требуемый вывод ниже.

Любая помощь или указатели приветствуются. Спасибо, Лк

Источник:

Array
(
[field_a] => Array
    (
        [type] => text
        [group_name] => 
    )

[field_b] => Array
    (
        [type] => number_integer
        [group_name] => group_other
    )

[field_c] => Array
    (
        [type] => text
        [group_name] => 
    )

[field_d] => Array
    (
        [type] => link
        [group_name] => group_web_links
    )

[field_e] => Array
    (
        [type] => link
        [group_name] => group_web_links
    )

[field_f] => Array
    (
        [type] => text
        [group_name] => group_web_links
    )

)

Выход:

Array
(
[group_other] => Array
    (
        [field_b] => Array
           (
               [type] => number_integer
               [group_name] => group_other
           )
    )

[group_web_links] => Array
    (
        [field_d] => Array
            (
                [type] => link
                [group_name] => group_web_links
            )

        [field_e] => Array
            (
                [type] => link
                [group_name] => group_web_links
            )

        [field_f] => Array
            (
                [type] => text
                [group_name] => group_web_links
            )
    )

[field_a] => Array
    (
        [type] => text
        [group_name] => 
    )

[field_c] => Array
    (
        [type] => text
        [group_name] => 
    )
)

Ответы [ 4 ]

0 голосов
/ 18 августа 2011
$new_array = array();
foreach( $old_array as $field_id => $field ) {
    if( $field[ 'group_name' ] == '' ) {
       $new_array[ $field_id ] = $field;
    } else {
       $new_array[ $field[ 'group_name' ] ][ $field_id ] = $field;
    }
}

Я полагаю, что те, кто не голосует, делают это, потому что я не инициализирую $new_array[ $field[ 'group_name' ] ]. Ну, это не обязательно в PHP, оно будет автоматически инициализировано с пустым массивом, когда вы выполните $new_array[ $field[ 'group_name' ] ][ $field_id ] = $field;.

0 голосов
/ 18 августа 2011

Это может быть выполнено простым циклом foreach:

$start_array; // The array you want to convert
$end_array = array (); // The final array
foreach ($start_array as $index => $value) {
    if (empty($value["group_name"])) {
        $end_array[$index] = $value;
    } else {
        $end_array[$value["group_name"]][$index] = $value;
    }
}
0 голосов
/ 18 августа 2011

Примерно так:

$array_dst = array();
foreach ($array_src as $group_key=>$group_data){
    $group_name = $group_data['group_name'];
    if (empty($array_dst[$group_name]))
        $array_dst[$group_name] = array();
    $array_dst[$group_name][$group_key] = $group_data;
}
0 голосов
/ 18 августа 2011

Если порядок ключей нового массива не так важен:

$new_array = array();
foreach ($old_array as $key => $value) {
    if (empty($value['group_name'])) $new_array[$key] = $value;
    else {
        if (!array_key_exists($value['group_name'], $new_array) $new_array[$value['group_name']] = array();
        $new_array[$value['group_name']][$key] = $value;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...