我前一段时间写了一个剧本,但是在过去的几天里遇到了一些问题时,我注意到在审查它时我没有正确地填充变量。在PHP中对del变量进行delcare并在子范围内填充它的正确方法是什么?我当前的代码如下所示,但我遇到了$ results var未被填充的问题。
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $GLOBALS["api_url"]);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 100);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
$data = curl_exec($ch);
curl_close($ch);
$data = explode(";",$data);
$results = array();
foreach ($data AS $temp)
{
$temp = explode("=",$temp);
$results[$temp[0]] = $temp[1];
}
if ($results["result"] == "success")
{
$log_terminate_success = "Service ID #" . $serviceid . " has been Immediately Terminated Successfully!";
log_activity($log_terminate_success);
return true;
}
else
{
$log_terminate_failure = "Service ID #" . $serviceid . " has failed Immediate Termination: " . $results["message"];
log_activity($log_terminate_failure);
return false;
}
答案 0 :(得分:0)
您不需要在PHP中声明变量。
如果您的$results
没有填满:您应该测试是否正确填充了$data
。尝试使用print_r($data);
查看是否存在您期望的正确数据。
此外,当您foreach()
explode()
数据后,$temp
$data
不再是数组。然后再将它再次爆炸到另一个数组中。如果原始{{1}}的行为符合预期,您还应测试此数据是否符合预期。
答案 1 :(得分:0)
$results;
这在PHP中绝对没有任何意义。你认为它会将变量$results
创建为空,但事实上它甚至不会这样做。你必须为它分配一个值:
$results = array();
答案 2 :(得分:0)
在您的示例代码中,您需要确保以下两件事:
您正在以循环形式访问循环内的$results
变量,因此您需要确保它是一个数组。
在循环之后,您正在检查'result'
索引 - 所以您可能希望始终定义它。
你可以把这条线放在你的循环之前:
$results = array('result' => 'unknown');
这会将变量定义为数组,并将起始result
值设置为st {'unknown'
。该值可能会在循环内被覆盖,但如果不是,则循环后仍然会有一个有效的比较 - 您将不会引用未定义的数组索引。
答案 3 :(得分:-1)
$results = array();
if( !empty($data) AND is_array($data) ) {
foreach ($data AS $temp) {
$temp = explode("=",$temp);
$results[$temp[0]] = $temp[1];
}
}
答案 4 :(得分:-1)
我认为问题在于:
$data = explode(";",$data);
$results;
它应该是:
$data = explode(";",$data);
$results = array();