我正在使用cakephp 1.3从城市和邮政编码的表中提取数据,我想提取这两列以填充下拉菜单中的邮政编码以菜单'id'和城镇名称作为菜单'值'。
“ find('list')”方法不可用,因为某些城镇有相同的邮政编码,而且该类只选择唯一值而不是获取:
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 :(得分: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'
)
)
)
然后使用Cake中的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()
帮助程序以创建下拉列表。
希望这有帮助!