在PHP中使用数组作为索引来访问多维数组



我在访问多维数组中的对象时遇到问题。

基本上,我有一个对象(类别),它由Name, ID, ParentID等组成。我还有一个多维数组ultimateArray

对于给定的类别,我正在编写一个函数(getPath()),它将返回ids的数组。例如,一个名为Granny Smith的对象的parentID为406,因此是Food(5) -> Fruits(101) -> Apples(406)的子对象。该函数将返回对象父类id的数组或字符串。在上面的示例中,这将是:5 -> 101 -> 406["5"]["101"]["406"][5][101][406]。食物是一个根类!

我需要做的是使用从getPath()返回的任何内容来访问类别id 406(苹果),以便我可以将对象Granny Smith添加到Apples的子对象。

功能$path = $this->getPath('406');可适应。我只是很难使用下面一行返回的内容:

$this->ultimate[$path]['Children'][]= $category;

当我硬编码:

$this->ultimate["5"]["101"]["406"]['Children'][]= $category;
//or
$this->ultimate[5][101][406]['Children'][]= $category;

假设您有如下数组

<?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);

?> "

你可以尝试引用或混叠它
http://www.php.net/manual/en/language.references.whatdo.php
我们的想法是创建一个变量它是数组的别名并深入到变量中因为我们不能直接从string (AFAIK)中分配多维键


输出

Array
(
    [12] => Array
        (
            [65] => Array
                (
                    [90] => Array
                        (
                            [Children] => asdasdasdasdas
                        )
                )
        )
)

可以使用递归函数访问成员。如果键与路径不对应,则返回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']);

相关内容

  • 没有找到相关文章

最新更新