У меня есть такой массив:
$quantity = explode(",", $dataProducts["quantityArray"]);
$valuePrice = explode(",", $dataProducts["valuePriceArray"]);
$productsId = explode(",", $dataProducts["productsIdArray"]);
for($i=0;$i<count($productsId);$i++){
$products = array('id' => $productsId[$i],
'price' => $valuePrice[$i],
'quantity' => $quantity[$i]);
}
Предположим, что вектор состоит из 4 продуктов с их идентификатором, ценами и количеством. (Предварительно проверяю, что массив правильно вооружен)
$ products [0] = ['id' => 4, 'цена' => 20, 'количество' => 2]
$ products [1] = ['id' => 10, 'цена' => 100, 'количество' => 5]
$ products [2] = ['id' => 15, 'цена' => 40, 'количество' => 4]
$ products [3] = ['id' => 20, 'цена' => 50, 'количество' => 3]
И я передаю это в качестве параметра URL «успеха». Но когда генерируется URL, приходит только первый индекс массива.
$products= http_build_query($products);
#Configure the url of response for user
$preference->back_urls = array(
"success" => "{$url}/index.php?route=profile&data=".$products,
"failure" => "{$url}/index.php?route=error",
"pending" => "{$url}/index.php?ruta=pending"
);
Пример сгенерированного URL, только с первым индексом массива:
https://www.webpage.com/index.php?route=profile&data=id=4&price=20&quantity=2
Что я делаю не так?
2 ответа
Этот:
$products[0] = ['id' => 4, 'price' => 20, 'quantity' => 2];
$products[1] = ['id' => 10, 'price' => 100, 'quantity' => 5];
$products[2] = ['id' => 15, 'price' => 40, 'quantity' => 4];
$products[3] = ['id' => 20, 'price' => 50, 'quantity' => 3];
$str = http_build_query($products);
echo $str . PHP_EOL;
Создает это:
0% 5Bid % 5D = 4 & 0% 5Bprice % 5D = 20 & 0% 5Bquantity % 5D = 2 & 1 % 5Bid % 5D = 10 & 1 % 5Bprice % 5D = 100 & 1 % 5Bquantity % 5D = 5 & 2 % 5Bid % 5D = 15 & 2 % 5Bprice % 5D = 40 & 2 % 5Bquantity % 5D = 4 & 3 % 5Bid % 5D = 20 & 3 % 5Bprice % 5D = 50 & 3 % 5Bquantity % 5D = 3
Если вы ищете вывод, как это:
id=4&price=20&quantity=2&id=10&price=100&quantity=5&id=15&price=40&quantity=4&id=20&price=50&quantity=3
Затем сделайте это:
$str2 = '';
foreach($products as $product) {
$tmp = http_build_query($product);
if ( ! empty($str2) ) {
$str2 .= '&';
}
$str2 .= $tmp;
}
echo $str2 . "\n";
Вы можете закодировать весь массив в кодировке JSON base 64.
$data = base64_encode(json_encode($products));
echo "http://example.com/?data=" . $data . PHP_EOL;
Затем на приемном конце:
$products = json_decode(base64_decode($_GET['data']), true);
Чтобы добавить элемент в массив, используйте следующий синтаксис: $array[] = $value
В вашем примере:
for($i=0; $i<count($productsId); $i++){
$products[] = array(
'id' => $productsId[$i],
'price' => $valuePrice[$i],
'quantity' => $quantity[$i]
);
}
Похожие вопросы
Новые вопросы
php
PHP - это широко используемый высокоуровневый, динамический, объектно-ориентированный и интерпретируемый язык сценариев, в первую очередь предназначенный для серверной веб-разработки. Используется для вопросов о языке PHP.