在Cakephp 1.3

时间:2015-09-03 20:58:42

标签: php arrays cakephp-1.3

我正在使用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 ) 

1 个答案:

答案 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()帮助程序以创建下拉列表。

希望这有帮助!