【问题标题】:Can't get my Hash::combine right in CakePHP在 CakePHP 中无法正确获取我的 Hash::combine
【发布时间】:2016-03-21 04:32:48
【问题描述】:

我有一个数组,我正在尝试使用 Hash::combine 进行重构。

这是我的数组

Array
(
    [0] => Array
        (
            [T1] => Array
                (
                    [second] => APPLES
                    [Color] => GREEN
                    [Color_en] => #99cc66
                    [nombre] => 56
                )

        )

    [1] => Array
        (
            [T1] => Array
                (
                    [second] => APPLES
                    [Color] => BLUE
                    [Color_en] => #0099ff
                    [nombre] => 678
                )

        )

    [2] => Array
        (
            [T1] => Array
                (
                    [second] => BANANAS
                    [Color] => GREEN
                    [Color_en] => #99cc66
                    [nombre] => 366
                )

        )

    [3] => Array
        (
            [T1] => Array
                (
                    [second] => BANANAS
                    [Color] => BLUE
                    [Color_en] => #0099ff
                    [nombre] => 2000
                )

        )
)

而我想要实现的是下面的数组:

Array
    (
        [0] =>  Array
        (
            [0] => Array
                (
                    [y] => 56
                    [color] => #99cc66
                )

            [1] => Array
                (
                    [y] => 678
                    [color] => #0099ff
                )

            )
        )
        [1] =>  Array
        (
            [0] => Array
                (
                    [y] => 366
                    [color] => #99cc66
                )

            [1] => Array
                (
                    [y] => 2000
                    [color] => #0099ff
                )

            )
        )

所以第一个数组是“APPLES”,第二个是“BANANAS”,“y”是“nombre”,“Color_en”变成“color”。

我用 Hash::combine 尝试了很多不同的方法,但我不知道如何做到这一点。

【问题讨论】:

    标签: php arrays cakephp hash


    【解决方案1】:

    这超出了Hash::combine() 的范围。您不能使用它来重命名数组索引。

    您可能做的最接近的事情是通过{n}.T1.second 组合数组值,将水果组合在一起,如下所示:-

    Hash::combine($array, '{n}.T1.nombre', '{n}.T1', '{n}.T1.second');
    

    对于您想要实现的目标,您需要使用foreach 循环自己重建阵列。像这样的东西:-

    $data = [];
    foreach ($array as $value) {
        $data[$value['T1']['second']][] = [
            'y' => $value['T1']['nombre'],
            'color' => $value['T1']['Color_en']
        ];
    }
    

    【讨论】:

    • 非常感谢您的回复。如果我将 nombre 重命名为“y”,将 Color_en 重命名为“color”(显然 Color 为“x”之类的其他名称)会怎样。这一切都来自数据库,所以我很容易做到。那么是否可以使用 Hash::combine()
    • 重命名数据库中的列以使Hash::combine() 正常工作听起来有点倒退的方法来使某些东西正常工作,但并不理想。我仍然认为它不会帮助你实现你想要的。 Hash::combine() 在许多情况下都非常有用,但我认为它不是您想要实现的目标而不会使事情过于复杂的正确解决方案。在一天结束时,Hash 实用程序将遍历您的数组,因此如果您可以使用自定义 foreach 轻松实现所需的结果,我会这样做。
    • 我会去找你的解决方案。非常感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-07
    • 1970-01-01
    • 2021-03-09
    • 1970-01-01
    • 2011-08-23
    相关资源
    最近更新 更多