解析PHP多维数组

3
以下是我正在处理的一些非常简单的PHP多维数组解析内容。我只是在搜索“高亮”键,然后将一些键值对存储到另一个数组中。有没有更好的方法来实现这个目标(我的意思是关于性能方面),而不是使用n个foreach循环来获取您想要的结果。
$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);

这里是一个我正在尝试解析的PHP对象示例:

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>...

....
....

现在有两个问题:1)我能更快地做到吗?2)我能设计得更好吗?

4个回答

7

这似乎是不必要的

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

您可以简单地执行以下操作。
        foreach($json_O['highlighting'] as $section2=>$items2){

简化其余部分也是可能的,尽管这未经测试。
$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');
}

个人而言,我会选择使用嵌套的foreach循环。这种方法非常易于理解,而我那种创意性地使用递归迭代器的方法则不是如此。


2
foreach($json_O['highlighting'] as ... ) {
   ...
}

即使数据是从json格式获取的,也不意味着你不能像普通的PHP数组那样访问它,因为它现在就是一个普通的PHP数组。


1

当你需要访问每一个项目时,请使用foreach。如果你只想要高亮显示,那么直接访问即可。

$higlighting = $json_0['highlighting'];
foreach($highlightis as $Key => $value) {
 //....
}

0
一些基准测试显示,for(;;)循环比foreach()更具性能优势。当然,直接访问数组元素也更快。

不知道,他在问,他是否可以更快地完成。 - heximal
好的,那就是一个答案,直到他澄清了他的问题 8) - llamerr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接