Can';我的Hash::combine不能在CakePHP中正确使用
我有一个数组,我正试图用Hash::combine重新建模 这是我的阵列Can';我的Hash::combine不能在CakePHP中正确使用,php,arrays,cakephp,hash,Php,Arrays,Cakephp,Hash,我有一个数组,我正试图用Hash::combine重新建模 这是我的阵列 Array ( [0] => Array ( [T1] => Array ( [second] => APPLES [Color] => GREEN [Color_en] => #99cc66
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
)
)
)
所以第一个数组是“苹果”,第二个数组是“香蕉”,“y”是“nombre”,“Color_en”变成“Color”
我用Hash::combine()尝试了很多不同的方法,但我不知道如何做到这一点。这超出了
Hash::combine()
的范围。你不能用它来重命名数组索引
您可能要做的最接近的事情是通过{n}.T1.second
将数组值组合在一起,如下所示:-
Hash::combine($array, '{n}.T1.nombre', '{n}.T1', '{n}.T1.second');
$data = [];
foreach ($array as $value) {
$data[$value['T1']['second']][] = [
'y' => $value['T1']['nombre'],
'color' => $value['T1']['Color_en']
];
}
对于您试图实现的目标,您需要使用foreach
循环自己重建阵列。类似如下:-
Hash::combine($array, '{n}.T1.nombre', '{n}.T1', '{n}.T1.second');
$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()
在许多情况下都非常有用,但我认为这不是一个不让事情变得过于复杂的正确解决方案。在一天结束时,散列
实用程序将在您的数组中迭代,因此如果您可以使用自定义的foreach
轻松实现所需的结果,我会这样做。我会为您的解决方案。非常感谢您的帮助!