У меня есть массив, который выглядит так:
http://pastebin.com/jtFBeQ88
(Небольшой раздел, используйте ссылку, чтобы увидеть полный массив)
string(635) "<InventoryStatus>
<ItemID>171770899535</ItemID>
<Quantity>0</Quantity>
<SKU>0000003830-000011299</SKU>
</InventoryStatus>
<InventoryStatus>
<ItemID>171770899535</ItemID>
<Quantity>0</Quantity>
<SKU>0000003830-000011303</SKU>
</InventoryStatus>
<InventoryStatus>
<ItemID>171770899535</ItemID>
<Quantity>0</Quantity>
<SKU>0000003830-000011583</SKU>
</InventoryStatus>
<InventoryStatus>
<ItemID>171770899535</ItemID>
<Quantity>0</Quantity>
<SKU>0000003830-000013149</SKU>
</InventoryStatus>
<InventoryStatus>
<ItemID>171770899535</ItemID>
<Quantity>0</Quantity>
<SKU>0000003830-000013154</SKU>
</InventoryStatus>
Я пытаюсь извлечь данные в наборе из 4 элементов из уровня InventoryStatus.
Пример этого вывода будет выглядеть следующим образом.
<InventoryStatus>
<ItemID>171770899535</ItemID>
<Quantity>0</Quantity>
<SKU>0000003830-000011303</SKU>
</InventoryStatus>
<InventoryStatus>
<ItemID>171770899535</ItemID>
<Quantity>0</Quantity>
<SKU>0000003830-000011583</SKU>
</InventoryStatus>
<InventoryStatus>
<ItemID>171770899535</ItemID>
<Quantity>0</Quantity>
<SKU>0000003830-000013149</SKU>
</InventoryStatus>
<InventoryStatus>
<ItemID>171770899535</ItemID>
<Quantity>0</Quantity>
<SKU>0000003830-000013154</SKU>
</InventoryStatus>
Я использовал array_slice, но я, кажется, только могу указать количество.
Так что, если я использую 4, то его 4 узла сверху вниз.
Я мог бы использовать счет 20, поскольку каждый узел всегда равен 5. Но это предполагает, что никакие дополнительные узлы никогда не будут добавлены.
Как это сделать, используя ключ для извлечения данных вместо числа.
foreach (array_slice($xmlReq, 4) as $slice) {
echo implode(' ', $slice), "\n"; }
Что-то вроде:
foreach (array_slice(xmlReq->InventoryStatus, 4) as $slice {
Echo $slice ."Should show JUST 4 Node sets of InventoryStatus"}
Может быть, array_slice — это не тот способ, если не тот, который был бы более подходящим для использования
использование array_chunk()
foreach (array_chunk($xmlReq, 4) as $slice) {
echo implode(' ', $slice), "\n";
}
Из руководства http://php.net/manual/en/function.array-chunk.php
массив array_chunk (массив $ array, int $ size [, bool $ preserve_keys = false])
Разбивает массив на массивы с элементами размера. Последний кусок может содержать элементы меньше размера.
Обрабатывайте его как XML и анализируйте, например, с SimpleXml
:
$xml = simplexml_load_string("<set>$string</set>"); // assume XML in $string
$count = 0;
foreach ($xml->xpath("/set/InventoryStatus") as $item) {
echo $item->asXML() . PHP_EOL;
$count++;
if ($count > 3) break;
}
Заворачивать $string
в корневом теге сделайте его объектом, итерируйте <InventoryStatus>
узлы, echo
их считать до 4.
Сделай это для всего array
струн.
увидеть это в действии: https://eval.in/537665