【问题标题】:A hash::combine array散列::组合数组
【发布时间】:2016-06-03 13:24:08
【问题描述】:

我有这个来自 sql 查询的数组:

   [0] => Array
    (
        [T1] => Array
            (
                [First] => A
                [Second] => Apples
                [LastChild] => F
            )

        [0] => Array
            (
                [LastChildNb] => 23
            )

    )

我想要这个结果:

   [0] => Array
    (
        [0] => Array
            (
                [First] => A
                [Second] => Apples
                [LastChild] => F
                [LastChildNb] => 23
            )

    )

我该怎么做?我想我应该使用“hash::combine”,但是代码是什么?

【问题讨论】:

  • 会一直这样设置吗?合并两个嵌套数组?
  • 好吧,我的 MySQL 存储过程将其输出为一个结果集,但 CakePHP 将其解释为上面的数组。

标签: cakephp cakephp-2.3


【解决方案1】:

你可以做这样的事情,上面的数组是 $arr:

$arr = array_reduce($arr, function(&$arr, $v) {
                        return array_merge($arr, (array) $v);
                    }, array());

【讨论】:

  • 抱歉,你的函数给了我这个:[T1] => Array ([First] => Apples [Second] => z [LastChild] => NC) [0] => Array ([ LastChildNb] => 123 ) [1] => 数组 ([LastChildNb] => 141 )
【解决方案2】:

你可以的

array_merge($arr[0]['T1'], $arr[0][0])

其中$arr定义如下:

$arr = [0 => Array
(
    'T1' => Array
        (
            'First' => 'A',
            'Second' => 'Apples',
            'LastChild' => 'F'
        ),
    0 => Array
        (
            'LastChildNb' => 23
        )

)];

对于 $arr 中的多条记录,您可以简单地循环遍历所有记录并手动进行合并。

但是,假设您通过 find() 方法获取数组,我建议您考虑使用 T1__LastChildNb 作为条件“字段”中的别名。简单地说,如果你有如下发现:

$this->T1->find('all', ['fields' => 'T1.*, (SOME SUBQUERY) AS LastChildNb']);

然后修改为

$this->T1->find('all', ['fields' => 'T1.*, (SOME SUBQUERY) AS T1__LastChildNb']);

可能是您正在寻找的,因为它将直接返回所需的数组(在 2.6 上测试)。

如果您有兴趣了解更多信息,请告诉我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-22
    • 2011-07-26
    • 2017-10-25
    • 2010-12-04
    • 2015-02-03
    • 2012-06-12
    • 2012-02-21
    • 2023-04-10
    相关资源
    最近更新 更多