可以';t在CakePHP中获取我的Hash::combine


Can't get my Hash::combine right in CakePHP

我有一个数组,我正在尝试使用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尝试了很多不同的方法,但我不知道如何做到这一点。

这超出了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']
    ];
}