我一直在尝试使用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
)
)
我已经尝试过每一个例子,整个晚上一直在关于结合的手册部分。不能让这个工作:(
答案 0 :(得分:2)
我不完全确定我理解输出数组需要的具体格式。如果数组的第一个维度是单行,您应该能够执行以下操作:
array_values(Set::combine(reset($this->data), '/Tree/id', '/Tree'));
如果它有多行,则需要依次使用foreach
和Set::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');