CakePHP set :: combine()。需要将数值数组转换为关联数组

时间:2011-03-11 07:36:57

标签: php arrays cakephp

我一直在尝试使用set::combine方法构建一个数组,但我无法正常工作(我做错了什么!)。

我会注意到我需要把它变成一个关联数组,如:

[Tree] => Array
         (
             [id] => 1
             [name] => Pine
          )...

以下是我的数组示例:

Array
(
[1] => Array
    (
        [1] => Array
            (
                [Tree] => Array
                    (
                        [id] => 1
                        [name] => Pine
                    )

            )

    )...

这是我的set :: combine调用:

$combine = Set::combine($this->data,'{n}.Tree.id','{n}.Tree.name');
debug($combine);

这是$ combine的调试输出:

Array
(
    [] => 
)

我能做到:

$combine = Set::combine($this->data,'{n}.{n}.Tree.id','{n}.{n}.Tree.name');

但我仍然得到数字索引!

Array
 (
[Array] => Array
    (
        [0] => Oak nnn
    )

)

我已经尝试过每一个例子,整个晚上一直在关于结合的手册部分。不能让这个工作:(

2 个答案:

答案 0 :(得分:2)

我不完全确定我理解输出数组需要的具体格式。如果数组的第一个维度是单行,您应该能够执行以下操作:

array_values(Set::combine(reset($this->data), '/Tree/id', '/Tree'));

如果它有多行,则需要依次使用foreachSet::combine依次遍历数组的第一维,并使用Set::merge将结果合并到你的输出数组:

$outArray = array()
foreach($this->data as $row) {
    $outArray = Set::merge( $outArray, Set::combine($row, '/Tree/id', '/Tree'));
}

希望这有帮助。


更新

根据评论中阐明的要求,您可以像这样转换数组:

$outArray = array('Tree'=>array());
foreach($this->data as $row) {
    $outArray['Tree'] = Set::merge(
        $outArray['Tree'],
        Set::combine($row, '{n}.Tree.id', '{n}.Tree')
    );
}

答案 1 :(得分:0)

我理解输出数组需要的具体格式。如果数组的第一个维度是单行,您应该能够像下面的代码一样删除

$combine = Set::classicExtract($this->data, '{n}.Tree');