2015-09-03 2 views
0

Я использую CakePHP 1.3 для извлечения данных из таблицы с городами и почтовых индексами и я хотел бы, чтобы извлечь эти два столбца для заполнения выпадающим меню с почтовыми кодами, как меню 'id' и названия городов как меню 'значения'.Получение данных в одномерном массиве в CakePHP 1,3

«находка („список“)» метод из варианта, потому что некоторые из городов имеют те же почтовые индексы и класс выбирает только уникальное значение, так вместо того, чтобы:

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

I я получаю

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

метод находкой ('все') возвращает многомерный массив

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

Итак, каков ваш ожидаемый результат? – aldrin27

+0

Посмотрите на первый блок, там вы увидите ожидаемый результат. – Deduplicator

+0

@ aldrin27 ожидаемого выхода массив ( [800] => Дарвин [801] => Дарвин [810] => Allawa ) – ronline

ответ

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 класс в торт, чтобы извлечь некоторые данные :

$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

1. Результат поиска ('list') не работает, если у вас есть два идентичных ключа. 2. То же самое, когда дело касается Set-класса внутри CakePHP. В вашей демонстрации вы используете разные почтовые_коды для обоих элементов «Дарвина».Если вы установите один и тот же почтовый индекс для элементов как «Дарвина», вы получите обратно массив с одним недостающим элементом: массива ( [800] => Дарвин [802] => Allawa ) Вопрос сужается вплоть до php array_combine ($ keys, $ values); метод, который, по-видимому, предназначен для игнорирования ключевых дубликатов. – ronline

+0

Зачем вам две идентичные клавиши? –

+0

Я использовал тот же пример, что и вы. Где вы использовали 800 и 801 для darwin –

 Смежные вопросы

  • Нет связанных вопросов^_^