在'if'条件下执行php文件

时间:2013-05-21 08:30:14

标签: php soap foreach

我必须在循环中执行一些代码,但每次我尝试将所有代码放在下面的循环中时,结果集会变得疯狂,给我不真实的数据。
所以我想要尝试将循环从我的代码中删除。我试过这段代码:

include 'soapproxy.php';

$proxy = SoapProxy::login("astar", "Astar2012", "48");
$xmlusers = $proxy->getUsersInGroup("vehicles", 0); 
foreach($xmlusers->user as $user) {
    if($user->id > 1){
        include 'send_data_to_db.php?user=$user->id';
    }
}

它不能完成这项工作。有什么问题?

2 个答案:

答案 0 :(得分:1)

如果您需要将代码分成多个文件,那么问题的最佳答案是不在每次迭代中包含该文件,而是在新文件中定义一个函数并调用该函数。 (这就是上帝发明功能的原因,否则我们会把文件包含在各处)。使用include可以工作,但看起来像一个丑陋的黑客。

答案 1 :(得分:0)

就这样做:

include 'soapproxy.php';

$proxy = SoapProxy::login("astar", "Astar2012", "48");

$xmlusers = $proxy->getUsersInGroup("vehicles", 0); 

foreach($xmlusers->user as $user) {
    if($user->id > 1 {
        $user = $user->id; // or try $_GET['user'] = $_REQUEST['user'] = $user->id; if the included script MUST have the data inside $_GET or $_REQUEST.
        include 'send_data_to_db.php';
    }
}

Include将简单地获取文件内容并将其解析,就好像它只是在当前文件中一样。您无法为包含调用添加参数

但正如Rath所说,真正的最佳解决方案是编辑send_data_to_db.php,并使其内容成为一个函数,将$ user作为参数。然后你会做类似的事情:

include 'soapproxy.php';
include 'send_data_to_db.php'; // just include it once

$proxy = SoapProxy::login("astar", "Astar2012", "48");

$xmlusers = $proxy->getUsersInGroup("vehicles", 0); 

foreach($xmlusers->user as $user) {
    if($user->id > 1 {
        the_function_in_send_data_to_db.php($user->id); // call the function you created in the file multiple times
    }
}