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

理查德

我目前正在使用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);

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

理查德

我想到了。过去我使用RollingCurl遇到过同样的问题。我忘记在成功函数的数组开头添加&。
代替这个:

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

应该是这样的:

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

如果要访问循环外的值,则必须&在变量之前定义,就像我刚才展示的那样。我不知道另一种方式,如果有人知道更好的话,我很乐意听到。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章