开发者

Anything to attend when changing values in a multidimensional foreach() loop?

I got a site that executes the following code

    $keywords = ($_SESSION[$_POST['ts']]);

    print_r($keywords);

    foreach ($keywords as $keyword) {
        foreach ($keyword['whitelist'] as $entry) {
            foreach ($_POST as $key => $value) {
                if ($key == $entry['encoded_url']) {
                    $entry['ignore'] = $value;
                    $decodedURL = $this->base64->url_decode($entry['encoded_url']);
                    if ($value == 'noignore') {
                        echo "found!<br />";
                        $this->blacklist_model->remove($decodedURL);
                        $html = $this->analyse->getHTML($decodedURL);
                        $entry['html'] = $html[0];
                        $entry['loading_time'] = $html[1];
                    }
                    if($value == 'alwaysignore') {
                        $this->blacklist_model->add($decodedURL);
                    }
         开发者_Go百科       }
            }
        }
    }

    print_r($keywords);

The output looks like this: http://pastebin.com/B3PtrqjB

So, as you see, there are several "found!"s in the output, so the if clause actually gets executed a few times and I expected the second array to contain new data like 'html', but, as you see, nothing changes. Is there anything to attend when changing values in multidimensional foreach() loops?


foreach creates a copy of the array and loops through that. Modifying values doesn't work.

You can get around this, though, by using references.

foreach ($keywords as &$keyword) { 
    foreach ($keyword['whitelist'] as &$entry) { 
        foreach ($_POST as $key => &$value) { 
            ...
        }
    }
}

With that you can modify $value and it WILL affect the original array.


You suppose to change the Original array.
$entry is just an instance / unconnected node.
you need to change $keywords, and not its on the fly created nodes.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜