如何使用Key / Index每4个元素提取数组

时间:2016-03-16 15:02:58

标签: php arrays xml slice

我有一个看起来像这样的数组: 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>

我正在尝试从InventoryStatus级别提取4个元素的数据集。 此输出的示例如下所示。

 <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.但是假设没有添加额外的节点。

如何使用Key提取数据而不是数字。

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不是那种方法,如果不是更适合使用

2 个答案:

答案 0 :(得分:1)

使用array_chunk()

foreach (array_chunk($xmlReq, 4) as $slice) {
    echo implode(' ', $slice), "\n";
}

来自手册http://php.net/manual/en/function.array-chunk.php

  

array array_chunk(array $ array,int $ size [,bool $ preserve_keys = false])
  将数组块化为具有大小元素的数组。最后一个块可能包含少于大小的元素。

答案 1 :(得分:0)

将其视为XML并对其进行解析,例如与if (iBlowedUp = true) { iBlowedUp = false; StartCoroutine (waitForIt ()); Destroy (tf); tfpf = Instantiate (Resources.Load ("Prefabs/tfpf")) as GameObject; }

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>它们,计数到4。 为整个echo字符串执行此操作。

在行动中看到它:https://eval.in/537665