简体   繁体   中英

How do dynamically access a value within a multidimensional array

Im wanting to dynamically access a multidimensional array, as i have a need to display the full path within a config file. Below are a couple of examples of how i know you can access the value at a certain level.

echo $results['Data']['MetaAttrListId']['0'];

$string = "MetaAttrListId";
echo $results['Data'][$string]['0'];

But what i want to be able to do is provide the full location/path to that area in a string. Like so.

$string = "['Data']['MetaAttrListId']['0']";
echo $results[$string];

the output of the multidimensional array im accessing.

    (
        [Data] => Array
            (
                [MetaTitle] => Array
                    (
                        [0] => Vauxhall combo 1.3 cdti in stunning condition low mileage long mot till august
                    )

                [MetaAttrListId] => Array
                    (
                        [0] => Posted
                        [1] => Make
                        [2] => Model
                        [3] => Year
                        [4] => Mileage
                        [5] => Seller type
                        [6] => Body type
                        [7] => Fuel type
                        [8] => Transmission
                        [9] => Colour
                        [10] => Engine size
                    )

                [MetaAttrListValue] => Array
                    (
                        [0] => 1 day ago
                        [1] => Vauxhall
                        [2] => COMBO
                        [3] => 2005
                        [4] => 79000
                        [5] => Private
                        [6] => Car Derived Van
                        [7] => Diesel
                        [8] => Manual
                        [9] => Red
                        [10] => 1248
                    )

            )

        [Error] => 
    )

You might try this function I built the other day (also inspired by another stackoverflow thread I don't find right now, but there are similar questions)

Use it like value_in($arrayThingy, 'path.to.that.entry') or value_in($arrayThingy, 'path/to/that/entry', '/')

Hope it helps, and please report any failure if you find one : )

/**
 * value_in
 * 
 * @param  mixed    $haystack   array or object or nested mix of both
 * @param  string   $path       path in any token-separated notation
 * @param  string   $token      path separator token
 * @return mixed                resolved value
 */
function value_in($haystack, $path, $token = ".") {
    $path = trim($path, $token); // path.to.place
    $segments = explode($token, $path); // ["path", "to", "place"]
    $remains = $haystack;
    foreach ($segments as $segment) {

        if (gettype($remains) === 'array' && isset($remains[$segment])) {
            $remains = $remains[$segment];
        } else if (gettype($remains) === 'object' && isset($remains->$segment)) {
            $remains = $remains->$segment;

        } else {
            return null;
        }
    }
    return $remains;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM