Получение данных в одномерном массиве в Cakephp 1.3

Я использую CakePHP 1.3 для извлечения данных из таблицы с Города а также Почтовые индексы и я хотел бы извлечь эти два столбца, чтобы заполнить раскрывающееся меню с почтовыми кодами, как идентификатор меню а также названия городов как меню ‘ценности’.

«найти («список»)”Метод недоступен, потому что некоторые города имеют одинаковые почтовые индексы, а класс выбирает только уникальные значения, поэтому вместо получения:

Array
(
[800] =>  Darwin
[801] =>  Darwin
[810] =>  Allawa
)

я получаю

Array
(
[800] =>  Darwin
[810] =>  Allawa
)

Метод find (‘all’) возвращает многомерный массив

Array
(
[0] => Array
(
[GeoPostcode] => Array
(
[state_id] => 26
[region] => Acton
)

)

[1] => Array
(
[GeoPostcode] => Array
(
[state_id] => 26
[region] => Ainslie
)
)
)

Как лучше всего обойтись, чтобы получить нужные данные в одномерном массиве, не сводя вывод к уникальным ключам массива? Что-то вроде :

Array ( [800] => Darwin [801] => Darwin [810] => Allawa )

0

Решение

Вы все еще должны быть в состоянии сделать это с $Model->find('list'),

$this->Model->find(
'list',
array(
'fields' => array(
'postal_code',
'city_name'
),
'contain' => false
)
);

Это должно вернуть набор результатов списка, используя два поля, которые вы выбрали (почтовый индекс и название города).

Ваш альтернативный вариант, это сделать find('all'):

$results = $this->Model->find(
'all',
array(
'conditions' => array( ... )
)
);

Теперь у вас есть этот формат в ваших данных результатов:

$results = Array
(
[0] => Array
(
[ModelName] => Array
(
[id] => 1
[postal_code] => 800,
[city_name] => 'Darwin'
)

)

[1] => Array
(
[ModelName] => Array
(
[id] => 2
[postal_code] => 801,
[city_name] => 'Darwin'
)
)

[2] => Array
(
[ModelName] => Array
(
[id] => 3
[postal_code] => 810,
[city_name] => 'Allawa'
)
)
)

Затем используйте Set класс в Cake для извлечения некоторых данных:

 $keys   = Set::extract('/ModelName/postal_code', $results);
$values = Set::extract('/ModelName/city_name', $results);


/* Then some array_combine magic */
$list   = array_combine($keys, $values);

Теперь у вас есть массив, который вы хотите. Хотя и дольше, но это работает. Затем вы можете передать эту переменную Form::select() помощник, чтобы создать свой выпадающий.

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector