Как извлечь массив с помощью ключа / индекса каждые 4 элемента

У меня есть массив, который выглядит так:
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 — это не тот способ, если не тот, который был бы более подходящим для использования

0

Решение

использование 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])
Разбивает массив на массивы с элементами размера. Последний кусок может содержать элементы меньше размера.

1

Другие решения

Обрабатывайте его как 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

0

По вопросам рекламы [email protected]