Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Parsing PHP Multidimensional Array

Tags:

php

Here (given below) is some very simple php parsing multidimensional array stuff I am doing. I am just searching for 'highlighting' key and then storing some key value pairs in another array. Is there any better way to achieve this (I mean with respect to performance), rather than have n foreach loops to get to what you want.

$json_O=json_decode(file_get_contents($url),true);
     foreach($json_O as $section1=>$items1){
        if($section1==highlighting){
            foreach($items1 as $section2=>$items2){
                    $key=$section2;
                    foreach($items2 as $section3=>$items3){
                        foreach ($items3 as $section4=>$items4){
                            $value=$items4;
                            $found[]=array('Key' => $key, 'Value' => $value);

Here is a sample php object I am trying to parse:

Array
(
    [responseHeader] => Array
        (
            [status] => 0
            [QTime] => 3
            [params] => Array
                (
                    [indent] => on
                    [start] => 0
                    [q] => russian
                    [fragsize] => 40
                    [hl.fl] => Data
                    [wt] => json
                    [hl] => on
                    [rows] => 8
                )

        )

    [response] => Array
        (
            [numFound] => 71199
            [start] => 0
            [docs] => Array
......
......
    [highlighting] => Array
        (
            [114360] => Array
                (
                    [Data] => Array
                        (
                            [0] => AMEki has done it better <em>russian</em>...

....
....

Two things now: 1)Can I do it quicker? 2)Can I design it better?

like image 465
avinash shah Avatar asked Sep 13 '25 15:09

avinash shah


1 Answers

this seems unneccesary

 foreach($json_O as $section1=>$items1){
    if($section1==highlighting){
        foreach($items1 as $section2=>$items2){

you could simply do

        foreach($json_O['highlighting'] as $section2=>$items2){

simplifying the rest is also possible, although this is untested

$riter = new RecursiveArrayIterator($json_O['highlighting']);
$riteriter = new RecursiveIteratorIterator($riter, RecursiveIteratorIterator::LEAVES_ONLY);
$found = array();
foreach ($riteriter as $key => $value) {
    $key = $riteriter->getSubIterator($riteriter->getDepth() - 2)->key();
    $found[] = compact('key', 'value');
}

personally, I would just use the nested foreach loops though. It's very easy to understand, while my creative use of recursive iterators is not.

like image 190
goat Avatar answered Sep 16 '25 07:09

goat