Сортировка и массив из simplexml - PullRequest
0 голосов
/ 05 ноября 2011

У меня есть productxml с несколькими продавцами, которые имеют разные цены. Мне нужно как-то отсортировать массив после того, как я проведу через объект simplexml и поместу его в массив.

Цикл по xml-файлу:

    foreach($item->Offers->Offer as $offer) {

$trackerprices[]['price'] = $offer->Price;
$trackerprices[]['id_seller'] = $offer->Seller->Id;


}

Итак, когда я var_dump $ trackerprices, он выводит:

array(18) { [0]=> array(1) { ["price"]=> object(SimpleXMLElement)#22 (1) { [0]=> string(4) "10.0" } } [1]=> array(1) { ["id_seller"]=> object(SimpleXMLElement)#26 (1) { [0]=> string(16) "1001004002814931" } } [2]=> array(1) { ["price"]=> object(SimpleXMLElement)#16 (1) { [0]=> string(4) "8.29" } } [3]=> array(1) { ["id_seller"]=> object(SimpleXMLElement)#28 (1) { [0]=> string(6) "187216" } } [4]=> array(1) { ["price"]=> object(SimpleXMLElement)#24 (1) { [0]=> string(3) "9.0" } } [5]=> array(1) { ["id_seller"]=> object(SimpleXMLElement)#30 (1) { [0]=> string(6) "441404" } } [6]=> array(1) { ["price"]=> object(SimpleXMLElement)#25 (1) { [0]=> string(4) "9.75" } } [7]=> array(1) { ["id_seller"]=> object(SimpleXMLElement)#32 (1) { [0]=> string(5) "25430" } } [8]=> array(1) { ["price"]=> object(SimpleXMLElement)#27 (1) { [0]=> string(4) "9.95" } } [9]=> array(1) { ["id_seller"]=> object(SimpleXMLElement)#34 (1) { [0]=> string(6) "150362" } } [10]=> array(1) { ["price"]=> object(SimpleXMLElement)#29 (1) { [0]=> string(3) "8.0" } } [11]=> array(1) { ["id_seller"]=> object(SimpleXMLElement)#36 (1) { [0]=> string(6) "502339" } } [12]=> array(1) { ["price"]=> object(SimpleXMLElement)#31 (1) { [0]=> string(3) "9.0" } } [13]=> array(1) { ["id_seller"]=> object(SimpleXMLElement)#38 (1) { [0]=> string(6) "117478" } } [14]=> array(1) { ["price"]=> object(SimpleXMLElement)#33 (1) { [0]=> string(4) "15.0" } } [15]=> array(1) { ["id_seller"]=> object(SimpleXMLElement)#40 (1) { [0]=> string(6) "153058" } } [16]=> array(1) { ["price"]=> object(SimpleXMLElement)#35 (1) { [0]=> string(3) "6.5" } } [17]=> array(1) { ["id_seller"]=> object(SimpleXMLElement)#42 (1) { [0]=> string(6) "402391" } } } 

Нет, мне нужен способ сортировки продукции по цене ASC.

Я застрял здесь, кто-нибудь может мне помочь?

Заранее спасибо!

1 Ответ

0 голосов
/ 05 ноября 2011

Сначала вы, вероятно, захотите использовать эту структуру:

foreach($item->Offers->Offer as $offer) {
  $trackerprices[] = array('price' => (float)$offer->Price, 
                           'id_seller' => (string)$offer->Seller->Id);
}

Таким образом, вы сохраняете цену и соответствующий продавец_id вместе.Итак, теперь у вас есть массив пар цена-продавец, и вам нужно его отсортировать по ценовому полю каждой пары.Для этого вы можете использовать multisort .Это только один способ сделать это, могут быть более эффективные решения.

foreach($trackerprices as $tp) {
     $sort[] = $tp['price'];
}
array_multisort($sort, SORT_ASC, $trackerprices);

Все вместе, это еще 3 строки кода:

$sort = array();
foreach($item->Offers->Offer as $offer) {
  $trackerprices[] = array('price' => (float)$offer->Price, 
                           'id_seller' => (string)$offer->Seller->Id);
  $sort[] = $tp['price'];
}
array_multisort($sort, SORT_ASC, $trackerprices);

Я не проверял это, но вы поняли идею, и я надеюсь, что это поможет.

...