Я сейчас пользуюсь PHP-завиток-класс и я пытаюсь создать массив URL-адресов из ответов JSON, которые соответствуют коду ошибки в моем коде ниже. Моей последней попыткой было использование 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)
Если вы хотите получить доступ к значениям вне цикла, вы должны определить &
перед вашей переменной, как я только что показал. Я не знаю другого пути, если кто-то знает что-то лучше, я был бы рад услышать это.
Других решений пока нет …