(PHP) Преобразование массива массивов из одного формата в другой - PullRequest
0 голосов
/ 17 июня 2010

В настоящее время у меня есть массив, созданный из базы данных, пример которого выглядит следующим образом:

Array(
    [0] => Array (
        objectid => 2,
        name => title,
        value => apple
    ),

    [1] => Array (
        objectid => 2,
        name => colour,
        value => red
    ),

    [2] => Array (
        objectid => 3,
        name => title,
        value => pear
    ),

    [3] => Array (
        objectid => 3,
        name => colour,
        value => green
    )
)

Что я хотел бы сделать, это сгруппировать все элементы в массиве по их объекту,и преобразовать значения 'name' в ключи, а значения 'value' в значения ассоциативного массива .... как показано ниже:

Array (
    [0] => Array (
        objectid => 2,
        title => apple,
        colour => red
    ),

    [1] => Array (
        objectid => 3,
        title => pear,
        colour => green
    )
)

Я пробовал несколько вещей, но на самом деле нигде не получил.. Есть идеи?Заранее спасибо

Ответы [ 3 ]

0 голосов
/ 17 июня 2010

Метод Питера совершенно верен, я просто подумал, что покажу более короткую версию того же самого (не могу сделать в комментарии)

foreach( $array as $obj ) {
    if( !isset( $objects[$obj['objectid']] ) )
        $objects[$obj['objectid']]['objectid'] = $obj['objectid'];

    $objects[$obj['objectid']][$obj['name']] = $obj['value'];
}
0 голосов
/ 17 июня 2010

Это должно работать с вашей текущей настройкой и должно быть в состоянии обработать столько пар ключ-значение, сколько доступно:

<?php

$results = array(
    array('objectid' => 2, 'name' => 'title', 'value' => 'apple'), 
    array('objectid' => 2, 'name' => 'color', 'value' => 'red'),
    array('objectid' => 3, 'name' => 'title', 'value' => 'pear'), 
    array('objectid' => 3, 'name' => 'color', 'value' => 'green'));

$final = array();
foreach ($results as $result) {
    $final[$result['objectid']]['objectid'] = $result['objectid'];
    $final[$result['objectid']][$result['name']] = $result['value'];
}

print_r($final);
0 голосов
/ 17 июня 2010

Было бы проще, чтобы ключи массива соответствовали вашему идентификатору объекта, чтобы вы могли перебирать существующий массив и добавлять пары ключ-значение для каждого объекта, например:

$newArray = array();
foreach ($results as $result) {

    if (!array_key_exists($result['objectid'], $newArray)) {
        $newArray[$result['objectid'] = array();
    }

    foreach ($result as $key => $value) {
        $newArray[$result['objectid'][$key] = $value;
    }
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...