0

不久前我写了一个脚本,但在过去几天遇到了一些问题,我在查看它时注意到我没有正确填充变量。在 PHP 中删除变量并将其填充到子范围中的正确方法是什么?我当前的代码如下所示,但我遇到了 $results 变量未填充的问题。

$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;
}
4

5 回答 5

0

您不需要在 PHP 中声明变量。

如果你$results没有被填满:你应该测试是否$data被正确填满。尝试使用print_r($data);以查看您期望的数据是否正确。

此外,当您foreach()的数据是一个数组explode()时,它$temp不再是一个数组。然后,您再次将其分解为另一个数组。您还应该测试此数据是否符合您的预期,以防原始数据$data按预期运行。

于 2013-07-23T06:37:13.813 回答
0
$results;

令人惊讶的是,这在 PHP 中完全没有任何作用。你会认为它会将变量创建$results为空,但实际上它甚至没有这样做。您必须为其分配一个值:

$results = array();
于 2013-07-23T06:38:02.770 回答
0

在您的示例代码中,您需要确保两件事:

  1. 您将$results循环内的变量作为数组访问,因此您需要确保它是一个数组。

  2. 在循环之后,您正在检查'result'索引 - 所以您可能希望始终定义它。

您可以通过将此行放在循环之前来做到这一点:

$results = array('result' => 'unknown');

这会将变量定义为数组,并将起始值设置result为字符串 ' unknown'。该值可能会在循环内被覆盖,但如果不是,则循环后您仍然会有一个有效的比较 - 您不会引用未定义的数组索引。

于 2013-07-23T06:38:09.847 回答
-1

你可以试试:

$results = array();

if( !empty($data) AND is_array($data) ) {
    foreach ($data AS $temp) {
        $temp = explode("=",$temp);
        $results[$temp[0]] = $temp[1];
    }
}
于 2013-07-23T06:36:01.153 回答
-1

我认为问题出在这里:

$data = explode(";",$data);
$results;

它应该是:

$data = explode(";",$data);
$results = array();
于 2013-07-23T06:36:39.870 回答