Я работаю с WooCommerce API для разработки небольшого веб-приложения. Это приложение должно получить информацию из Wordpress/Woocommerce.php looping через многомерную массив медленно
Я могу тянуть в некоторых из этой информации штрафа, но возникли проблемы с другими битами (Это совершенно другой вопрос.)
Данные образуют WooCommerce REST API возвращается в виде многомерного массива.
Это пример одного заказа:
array (size=2)
'order' =>
array (size=30)
'id' => int 22
'order_number' => int 22
'created_at' => string '2015-07-30T14:01:54Z' (length=20)
'updated_at' => string '2015-07-30T14:01:54Z' (length=20)
'completed_at' => string '2015-07-30T13:01:54Z' (length=20)
'status' => string 'on-hold' (length=7)
'currency' => string 'GBP' (length=3)
'total' => string '3.84' (length=4)
'subtotal' => string '3.84' (length=4)
'total_line_items_quantity' => int 2
'total_tax' => string '0.00' (length=4)
'total_shipping' => string '0.00' (length=4)
'cart_tax' => string '0.00' (length=4)
'shipping_tax' => string '0.00' (length=4)
'total_discount' => string '0.00' (length=4)
'shipping_methods' => string '' (length=0)
'payment_details' =>
array (size=3)
'method_id' => string 'bacs' (length=4)
'method_title' => string 'Direct Bank Transfer' (length=20)
'paid' => boolean false
'billing_address' =>
array (size=11)
'first_name' => string 'Chris' (length=5)
'last_name' => string '#' (length=5)
'company' => string '' (length=0)
'address_1' => string '#' (length=4)
'address_2' => string '' (length=0)
'city' => string '#' (length=7)
'state' => string '' (length=0)
'postcode' => string '#' (length=7)
'country' => string 'GB' (length=2)
'email' => string '#' (length=20)
'phone' => string '#' (length=11)
'shipping_address' =>
array (size=9)
'first_name' => string 'Chris' (length=5)
'last_name' => string '#' (length=5)
'company' => string '' (length=0)
'address_1' => string '#' (length=4)
'address_2' => string '' (length=0)
'city' => string '#' (length=7)
'state' => string '' (length=0)
'postcode' => string '#' (length=7)
'country' => string 'GB' (length=2)
'note' => string '' (length=0)
'customer_ip' => string '#' (length=15)
'customer_user_agent' => string 'Mozilla/5.0 (iPhone; CPU iPhone OS 8_4 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12H143 Safari/600.1.4' (length=134)
'customer_id' => int 1
'view_order_url' => string '#' (length=58)
'line_items' =>
array (size=2)
0 =>
array (size=12)
...
1 =>
array (size=12)
...
'shipping_lines' =>
array (size=0)
empty
'tax_lines' =>
array (size=0)
empty
'fee_lines' =>
array (size=0)
empty
'coupon_lines' =>
array (size=0)
empty
'customer' =>
array (size=14)
'id' => int 1
'created_at' => string '2015-07-29T16:12:13Z' (length=20)
'email' => string '#' (length=20)
'first_name' => string '' (length=0)
'last_name' => string '' (length=0)
'username' => string '#' (length=6)
'role' => string '#' (length=13)
'last_order_id' => string '26' (length=2)
'last_order_date' => string '2015-07-30T22:22:42Z' (length=20)
'orders_count' => int 5
'total_spent' => string '7.96' (length=4)
'avatar_url' => string '#' (length=34)
'billing_address' =>
array (size=11)
...
'shipping_address' =>
array (size=9)
...
'http' =>
array (size=2)
'request' =>
array (size=7)
'headers' =>
array (size=3)
...
'method' => string 'GET' (length=3)
'url' => string '#' (length=290)
'params' =>
array (size=5)
...
'data' =>
array (size=0)
...
'body' => null
'duration' => float 5.01302
'response' =>
array (size=3)
'body' => string '{"order":{"id":22,"order_number":22,"created_at":"2015-07-30T14:01:54Z","updated_at":"2015-07-30T14:01:54Z","completed_at":"2015-07-30T13:01:54Z","status":"on-hold","currency":"GBP","total":"3.84","subtotal":"3.84","total_line_items_quantity":2,"total_tax":"0.00","total_shipping":"0.00","cart_tax":"0.00","shipping_tax":"0.00","total_discount":"0.00","shipping_methods":"","payment_details":{"method_id":"bacs","method_title":"Direct Bank Transfer","paid":false},"billing_address":{"first_name":"Chris","last_na'... (length=2349)
'code' => int 200
'headers' =>
array (size=5)
...
Anywhere с хэш-я просто удалить данные из соображений безопасности.
Таким образом, мне нужно выполнить все заказы на выходную информацию. Я могу легко получить доступ к строк в главном «порядка» массива с помощью этого цикла:
$orders = $connect->orders->get(22);
foreach($orders as $order) {
foreach($order as $value) {
echo $value["order_number"];
$value["total"];
}
}
Этот цикл выполняется и выводит данные в считанные секунды.
Однако, когда я пришел к выводу данных из массива-х line_items "в пределах основного массива заказа:
1) Я не могу показаться, чтобы сделать это без указания идентификатора заказа в противном случае я получаю Undefined индекса: порядок и недопустимый аргумент для строки позиций foreach.
преодолеть, что я добавил эту строку в основной цикл, чтобы получить данные формируют массив «line_items»:
$line_items = $connect->orders->get($value["order_number"]);
$line_items = $orders['order']['line_items'];
Затем я запустить Еогеасп над этим для вывода значения образуют «line_items массив»
foreach($line_items as $item) {
echo $item['name'];
echo $item['quantity']';
}
так что это работает, но выводя «line_items» таким образом делает загрузку страницы невероятно медленной. он занимает около 40 секунд, чтобы пройти через 6 порядков.
, где, как и без этой линии:
$line_items = $connect->orders->get($value["order_number"]);
страница делает приблизительно через 5 секунд.
Мой вопрос: s это лучший способ получить доступ к массиву 'line_items'?
Ниже приведен полный код, выводящий информацию о заказе, включая позиции.
$orders = $connect->orders->get(22);
foreach($orders as $order) {
foreach($order as $value) {
echo $value["order_number"];
$value["total"];
//get line items based on current order id - this is the slow bit!
$line_items = $connect->orders->get($value["order_number"]);
$line_items = $orders['order']['line_items'];
//loop through line items
foreach($line_items as $item) {
echo $item['name'];
echo $item['quantity']';
}
}
}
Сколько данных выводится на страницу? 2K или 40M байт? – wallyk
Теперь это будет звучать глупо. Как я могу точно сказать, сколько данных выводится? – chinds
Один из способов - просмотреть источник веб-страницы (ctrl-U в браузерах семейства Mozilla), скопировать и вставить его в редактор, а затем сохранить его и посмотреть размер файла. – wallyk