从多个curl请求中向数组添加值

3

我目前正在使用php-curl-class,并尝试从JSON响应中创建一个URL数组,以匹配下面代码中的错误代码。 我最新的尝试是使用array_push,结果导致URL创建了一个相同URL的数组,如下所示。

Array
(
    [0] => http://example.com
    [1] => http://example.com
)

我正在尝试实现的目标类似于这样:

Array
(
    [0] => http://example.com
    [1] => http://example2.com
    [2] => http://example3.com
    [3] => http://example4.com

)

我的代码:

require __DIR__ . '/vendor/autoload.php';
use \Curl\MultiCurl;

$curl_opts = [
    CURLOPT_VERBOSE=> true
];

$out = array();
$errors = array();
$multi_curl = new MultiCurl();

$multi_curl->success(function ($instance) use (&$con, $out, $errors) {
    $out[$instance->out] = $instance->response;

   foreach ($out as $output){
        $error = $output->error;
        $p_id = $output->p_id;

    if (isset($error) && $error == '2'){
        echo '2 error';
        $errors[] = $instance->url;
        array_push($errors, $instance->url);
    }
}
    print_r($errors);
});

foreach($curl_opts as $key=>$value)
    $multi_curl->setOpt($key, $value);

$multi_curl->complete(function($instance){
    echo 1;
});

$multi_curl->addGet('http://example.com');
$multi_curl->addGet('http://example2.com');
$multi_curl->addGet('http://example3.com');
$multi_curl->addGet('http://example4.com');

$multi_curl->setConcurrency(3);
$multi_curl->start();

var_dump($multi_curl);

有人有什么建议吗?谢谢。


这样做似乎会重置数组,而print_r()每次只显示1个URL。 - Richard
没问题,无论如何还是谢谢。 - Richard
这不起作用,因为我要查找的错误值实际上是 JSON 本身中的一个值。 如果存在,根据错误号显示不同的值,我正在尝试过滤掉任何等于 2 的错误值。 - Richard
好的。嗯,似乎归结为更新全局变量,而不使用“global $errors;”。很抱歉我没有更多的帮助! - IncredibleHat
没关系,我很感激你的尝试。 - Richard
显示剩余3条评论
1个回答

0

我解决了。我以前使用RollingCurl时也遇到过同样的问题。我忘记在成功函数的数组开头添加&了。
而不是这样:

$multi_curl->success(function ($instance) use (&$con, $out, $errors) 

应该是这样的:
$multi_curl->success(function ($instance) use (&$con, &$out, &$errors) 

如果你想要在循环之外访问值,你必须在变量前定义 &,就像我刚刚展示的那样。我不知道其他方法,如果有人知道更好的方法,我很乐意听取建议。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接