【问题标题】:Retrieving data in unidimensional array in Cakephp 1.3在 Cakephp 1.3 中检索一维数组中的数据
【发布时间】:2015-09-03 20:58:41
【问题描述】:

我正在使用 cakephp 1.3 从带有 CitiesPostal Codes 的表中提取数据,我想提取这两列以填充带有邮政编码的下拉菜单menu 'id'town names 作为菜单 'values'

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 ) 

【问题讨论】:

  • 那么您的预期输出是什么?
  • 查看第一个块,您会看到预期的输出。
  • @aldrin27 预期输出是 Array ( [800] => Darwin [801] => Darwin [810] => Allawa )
  • 您有存储邮政编码的表格吗?还是它们与 City Name 存储在同一个表中?

标签: php arrays cakephp-1.3


【解决方案1】:

您应该仍然可以使用 $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() 助手以创建您的下拉菜单。

希望这会有所帮助!

【讨论】:

  • 1.如果您有两个相同的密钥,结果 find('list') 将不起作用。 2. Cakephp 中的 Set 类也是如此。在您的演示中,您对两个“达尔文”元素使用不同的邮政编码。如果您为两个 'Darwin' 元素设置相同的邮政编码,您将得到一个缺少一个元素的数组: Array ( [800] => Darwin [802] => Allawa ) 问题正在缩小到 php array_combine($keys , $值);显然旨在忽略关键重复项的方法。
  • 为什么会有两个相同的键?
  • 我使用了与您相同的示例。达尔文使用 800 和 801 的地方
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-09
  • 1970-01-01
  • 1970-01-01
  • 2021-06-22
  • 2011-04-14
  • 1970-01-01
相关资源
最近更新 更多