我在访问多维数组中的对象时遇到问题。
背景
基本上,我有一个对象(类别),它由Name
,ID
,ParentID
等组成。我还有一个数组ultimateArray
,它是多维的。
对于给定的类别,我正在编写一个函数(getPath()
),它将返回ids
的数组。例如,名为Granny Smith
的对象的parentID
为406,因此是Food(5)的子项 - >水果(101) - >苹果(406)。该函数将返回父对象的数组或字符串。在上面的示例中,这将是:5 -> 101 -> 406
或["5"]["101"]["406"]
或[5][101][406]
。食物是根类!
问题
我需要做的是使用从getPath()
返回的任何内容来访问类别ID 406
(Apples),以便我可以将对象Granny Smith
添加到{{1}的子项中1}}。
函数Apples
具有适应性。我在使用以下行中返回的内容时遇到了困难:
$path = $this->getPath('406');
当我硬编码时它起作用:
$this->ultimate[$path]['Children'][]= $category;
非常感谢任何帮助。
答案 0 :(得分:2)
假设您拥有如下所示的数组
<?php
$a = array(
12 => array(
65 => array(
90 => array(
'Children' => array()
)
)
)
);
$param = array(12, 65, 90); // your function should return values like this
$x =& $a; //we referencing / aliasing variable a to x
foreach($param as $p){
$x =& $x[$p]; //we step by step going into it
}
$x['Children'] = 'asdasdasdasdas';
print_r($a);
&GT;`
您可以尝试引用或别名
http://www.php.net/manual/en/language.references.whatdo.php
我们的想法是创建一个变量,它是数组的别名并从变量深入,因为我们无法直接从字符串(AFAIK)中分配多维键
输出
Array
(
[12] => Array
(
[65] => Array
(
[90] => Array
(
[Children] => asdasdasdasdas
)
)
)
)
答案 1 :(得分:0)
您可以使用递归函数来访问成员。如果键与路径不对应,则返回NULL,但您也可以在其中抛出错误或异常。另请注意,我已将“儿童”添加到路径中。我已经这样做了,所以你可以使用这个一般。我刚做了一个编辑,向你展示如何在没有孩子的情况下做到这一点。
<?php
$array = array(1 => array(2 => array(3 => array("Children" => array("this", "are", "my", "children")))));
$path = array(1, 2, 3, "Children");
$pathWithoutChildren = array(1, 2, 3);
function getMultiArrayValueByPath($array, $path) {
$key = array_shift($path);
if (array_key_exists($key, $array) == false) {
// requested key does not exist, in this example, just return null
return null;
}
if (count($path) > 0) {
return getMultiArrayValueByPath($array[$key], $path);
}
else {
return $array[$key];
}
}
var_dump(getMultiArrayValueByPath($array, $path));
$results = getMultiArrayValueByPath($array, $pathWithoutChildren);
var_dump($results['Children']);