【发布时间】:2018-01-19 22:05:33
【问题描述】:
我目前正在使用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);
有人有什么建议吗?谢谢。
【问题讨论】:
-
同时执行
$errors[] = $instance->url;和array_push($errors, $instance->url);可能是您看到其中两个网址的原因。评论其中一个,看看效果如何。 -
这样做会重置数组,并且 print_r() 每次传递后仅显示 1 个 url。
-
这一定是你在
use全局的$errors,它可能将它视为每个success的新变量,因此它不会增加。因为array_push和$array[]=基本上是一回事。我假设如果您将print_r($errors);移动到$multi_curl->start();之后,它将是空的。 -
这很奇怪,因为数组知道有多少值。例如,如果我运行 4 个链接,则 print_r() 将显示 4 个链接,但它始终是通过的最后一个链接的 4 个。不过你是正确的,在开始后移动打印什么都没有显示。
-
没问题,谢谢。
标签: php arrays curl curl-multi