CakePHP set :: comb ().Нужен числовой массив, преобразованный в ассоциативный массив - PullRequest
0 голосов
/ 11 марта 2011

Я пытался структурировать массив, используя метод set :: comb , и я не могу заставить его работать (что я делаю неправильно!).

И я отмечуМне нужно превратить это в ассоциативный массив, например:

[Tree] => Array
         (
             [id] => 1
             [name] => Pine
          )...

Вот пример моего массива:

Array
(
[1] => Array
    (
        [1] => Array
            (
                [Tree] => Array
                    (
                        [id] => 1
                        [name] => Pine
                    )

            )

    )...

А вот мой вызов set :: comb:

$combine = Set::combine($this->data,'{n}.Tree.id','{n}.Tree.name');
debug($combine);

А вот отладочный вывод $ comb:

Array
(
    [] => 
)

Я могу сделать:

$combine = Set::combine($this->data,'{n}.{n}.Tree.id','{n}.{n}.Tree.name');

Но я все еще получаю числовой индекс!1021 *

Я испробовал каждый пример и весь вечер изучал раздел руководства по комбайну.Не могу заставить это работать: (

Ответы [ 2 ]

2 голосов
/ 11 марта 2011

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

array_values(Set::combine(reset($this->data), '/Tree/id', '/Tree'));

Если в нем несколько строк, вам нужно будет выполнить итерацию по этому первому измерению массива с помощью foreach и Set::combine каждая строка по очереди, используя Set::merge для объединения результатов в ваш выходной массив:

$outArray = array()
foreach($this->data as $row) {
    $outArray = Set::merge( $outArray, Set::combine($row, '/Tree/id', '/Tree'));
}

Надеюсь, это поможет.


Обновление:

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

$outArray = array('Tree'=>array());
foreach($this->data as $row) {
    $outArray['Tree'] = Set::merge(
        $outArray['Tree'],
        Set::combine($row, '{n}.Tree.id', '{n}.Tree')
    );
}
0 голосов
/ 07 сентября 2016

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

$combine = Set::classicExtract($this->data, '{n}.Tree');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...