PHP-преобразование массива json с точечным ключом в данные $ this-> в контроллере cakephp - PullRequest
0 голосов
/ 22 марта 2011

У меня есть массив json в контроллере частиц, который выглядит следующим образом после json_encode, true:

Array
(
    [0] => Array
        (
            [Particle.day_id] => Sat
            [Particle.week_no] => 1
            [Particle.pattern_id] => 589
            [Particle.work] => 0
        )

    [1] => Array
        (
            [Particle.day_id] => Fri
            [Particle.week_no] => 1
            [Particle.pattern_id] => 589
            [Particle.work] => 0
        )

    [2] => Array
        (
            [Particle.day_id] => Thu
            [Particle.week_no] => 1
            [Particle.pattern_id] => 589
            [Particle.work] => 0
        )

    [3] => Array
        (.....

Я пытаюсь преобразовать этот массив в правильный формат для сохранения нескольких записей:

Array
(
    [Particle] => Array(
            [0] => Array
                (
                            [day_id] => Sat
                            [week_no] => 1
                            [pattern_id] => 589
                            [work] => 0
                        )
            [1] => Array
                (
                            [day_id] => Fri
                            [week_no] => 1
                            [pattern_id] => 589
                            [work] => 0
                        )
                )


                 ....

Где Particle - это имя моей модели Cakephp.

Ближайшее, что я могу получить, это использовать код (php):

 $output = array();

        foreach ($jsonData as $keyA => $valueA) {
        foreach ($valueA as $keyB => $valueB) {
            $output = Set::insert( $output, $keyB, $valueB );
        }
        }

Где $ jsonData - это массив json_encoded.Это дает мне:

Array
(
    [Particle] => Array
        (
            [day_id] => Sun
            [week_no] => 1
            [pattern_id] => 589
            [work] => 1
        )

)

Какая только первая часть массива - как мне получить остальную часть массива?

Я знаю, что ответ, вероятно, будет простым, но он имеетслишком долго сбивал меня с толку!

Спасибо за любую помощь.

1 Ответ

1 голос
/ 22 марта 2011
$result = array();
$parentKey = null;
foreach ($jsonData as $keyA => $valueA) {
     foreach ($valueA as $keyB => $valueB) {
        $keyB = explode('.', $keyB);
        list($parentKey, $childKey) = $keyB;
        $output[$childKey] = $valueB;
     }

    if(!isset($result[$parentKey]))
       $result[$parentKey] = array();

   array_push($result[$parentKey], $output);
}


 print_r($result);

Ваш текущий код перезаписывает массив $ output.Вот почему он показывает вам последнюю часть данных.

...