内在的foreach总是有外部foreach的最后一次迭代

时间:2016-02-19 12:12:05

标签: php arrays foreach

我有以下foreach循环(内部foreach循环):

foreach ($options_default as $key=>$value) {
        foreach ($option_names as $option_name_key=>$option_name_value){
            $temp = array($key=>$value);
            update_option($option_name_value, $temp);
            unset($temp);   
        }
    }

这个循环遍历这两个数组:

    $option_names = array (
                'API_URL'=>'api-url',
                'API_CDN_URL'=>'cdn-url',
                'API_USERNAME'=> 'api-username'
    );

    $options_default = array (
            'api_url' => 'url1', 
            'cdn_url' => 'url2', 
            'api_username' => 'test', 
);

但是,$temp的值始终设置为$options_default数组中的最后一个键/值对。任何人都可以在这里提出问题的建议吗?

- >预期产出

因此循环将使这三个调用更新选项(假设我只是将$ value作为第二个参数传递以便于):

update_option(api-url,url1);
update_option(cdn-url,url2);
update_option(api-username,test);

1 个答案:

答案 0 :(得分:0)

再次思考一下foreach循环的构造以及为什么它没有做你想要的东西。您目前正在$option_names上循环三次,这导致九次调用update_option。另请查看update_option的参数。在您的代码中,您将两个参数传递给它:字符串和数组。但你明显想要的是两个字符串。

您可以将MultipleIteratorArrayIterator结合使用来执行此任务:

$iterator = new MultipleIterator();
$iterator->attachIterator(new ArrayIterator($option_names));
$iterator->attachIterator(new ArrayIterator($options_default));

foreach ($iterator as $values) {
    update_option($values[0], $values[1]);
}

希望这有帮助