Сортировка многомерного масива

[censored]

Guest
Сортировка многомерного масива

Обрабатываю xml файл с помощью SimpleXML
В итоге в $xml хранится что-то типа этого:
PHP:
SimpleXMLElement Object ( [dbo.vArhiv1] => Array ( [0] => SimpleXMLElement Object ( [platejka_id] => 683 [platejka_number] => 1 [platejka_date] => 2005-03-22T00:00:00 [platelchik_id] => 150 [platelchik] => 5458 [poluchatel_id] => 134 [poluchatel] => hhhh [summa] => 1.000000000000000e+010 ) 
[363] => SimpleXMLElement Object ( [platejka_id] => 124 [platejka_number] => 83 [platejka_date] => 2003-05-29T00:00:00 [platelchik_id] => 1 [platelchik] => AAA [poluchatel_id] => 31 [poluchatel] => Клиент15 [summa] => 8.370000000000000e+002 [naznechenie_plateja] => 1010202; 45286585000; ТП; МС. 05.2003; 0; НС; "Уплата налог на доходы" ) ) )
Можно ли упорядочит это всё по platejka_date?

Пытаюсь использовать
array_multisort($volume, SORT_DESC, $xml);
но в итоге получаю Argument #3 is expected to be an array or a sort flag
 

[censored]

Guest
А рационально можно SimpleXMLElement Object преобразовать в массив?
Желательно без foreach
 

Фанат

oncle terrible
Команда форума
зачем преобразовывать?
у тебя в нём есть массив! в от к этому массиву и нао обращаться!
Ну разуй глаза-то!
 

[censored]

Guest
Ну тогда единственное что приходит на ум:
PHP:
foreach ($xml->xpath('//dbo.vArhiv1') as $key => $row) {
   $volume[$key]  = $row['summa'];
}
array_multisort($volume, SORT_DESC, $xml->xpath('//dbo.vArhiv1') );
Подскажи, что не так?

-~{}~ 22.03.05 14:20:

Wazaa..

Проблема решилась.

PHP:
<?php
/**
 * Convert SimpleXMLElement object to array
 * Copyright Daniel FAIVRE 2005 - www.geomaticien.com
 * Copyleft GPL license
 */

function simplexml2array($xml) {
   if (get_class($xml) == 'SimpleXMLElement') {
       $attributes = $xml->attributes();
       foreach($attributes as $k=>$v) {
           if ($v) $a[$k] = (string) $v;
       }
       $x = $xml;
       $xml = get_object_vars($xml);
   }
   if (is_array($xml)) {
       if (count($xml) == 0) return (string) $x; // for CDATA
       foreach($xml as $key=>$value) {
           $r[$key] = simplexml2array($value);
       }
       if (isset($a)) $r['@'] = $a;    // Attributes
       return $r;
   }
   return (string) $xml;
}

?>
-~{}~ 22.03.05 14:58:

Типа рано я обрадовался...
Массив я вытащил, а вот с его сортировкой... что-то не фурычит..
Итак сам массив:
Array ( [dbo.vArhiv1] => Array ( [0] => Array ( [platejka_id] => 683 [platejka_number] => 1 [platejka_date] => 2005-03-22T00:00:00 [platelchik_id] => 150 [platelchik] => 5458 [poluchatel_id] => 134 [poluchatel] => hhhh [summa] => 1.000000000000000e+010 ) [1] => Array ( [platejka_id] => 682 [platejka_number] => 1 [platejka_date] => 2005-03-21T00:00:00 [platelchik_id] => 2 [platelchik] => Москва [poluchatel_id] => 23 [poluchatel] => Клиент11 [summa] => 1.000000000000000e+005 [naznechenie_plateja] => dlmkvm;zv;vxzvnzlvafadsklxvklzdlfjmnafdskdmc:xvjd;jvmz:jvm zjv ) ) )



Пытаюсь отсортировать
PHP:
foreach ($sxml as $key => $row) {
   $volume[$key]  = $row['summa'];
}
array_multisort($volume, SORT_DESC, $sxml);
Не сортирует...
 

Фанат

oncle terrible
Команда форума
потренируйся на кошках.
в смысле - на простых массивах.
научись пользоваться usort
делай постепенно, не в лоб.
и всё у тебя получится
 

[censored]

Guest
На кошках получается...
Заюзал usort
Для простого массива (подобного тому, что в примере http://za2.php.net/manual/en/function.array-multisort.php )
всё работает. С тем, что нужно ... не хочет (не сортирует)

PHP:
function comparar($a, $b) {
       return strnatcasecmp($a["summa"], $b["summa"]);
}

usort($sxml, "comparar");
Может в самом массиве какой глюк?

-~{}~ 22.03.05 16:44:

Более наглядно сам массив:
Array
(
[0] => Array
(
[0] => Array
(
[platejka_id] => 124
[platejka_number] => 83
[platejka_date] => 2003-05-29T00:00:00
[platelchik_id] => 1
[platelchik] => AAA
[poluchatel_id] => 115
[poluchatel] => 1321
[summa] => 8.370000000000000e+002
[naznechenie_plateja] => 1010202; 45286585000; ТП; МС. 05.2003; 0; НС; "Уплата налог на доходы"
)

bla-bla-bla...

[353] => Array
(
[platejka_id] => 657
[platejka_number] => 82
[platejka_date] => 2005-03-16T00:00:00
[platelchik_id] => 1
[platelchik] => AAA
[poluchatel_id] => 31
[poluchatel] => Клиент15
[summa] => 2.128000000000000e+003
[naznechenie_plateja] => 1010520; 45286585000; ТП; МС. 05.2003; 0; НС; "4% уплата взносов" рег. № 7723003942
)

)

)
 

Markus®

Guest
[censored]
Мне кажется ты не тот массив сортируешь....
Если я правильно тебя понял
PHP:
Array(//$sxml
      [0] => Array(//$sxml[0]
                   [0]   => Array(
                                  [platejka_id] => 124
                                  [platejka_number] => 83
                                  [summa] => 8.370000000000000e+002
                                  )
                   [8]   => Array(
                                  [platejka_id] => 104
                                  [platejka_number] => 73
                                  [summa] => 5.444000000000000e+002
                                  )
                   [353] => Array(
                                  [platejka_id] => 657
                                  [platejka_number] => 82
                                  [summa] => 2.128000000000000e+003
                                  )
                   )
      )
То тебе надо сортировать $sxml[0]
 

[censored]

Guest
Если бы всё так просто...
The argument should be an array в данном варианте.

-~{}~ 23.03.05 09:24:

Ааа. всё... супер тупка кончилась..
Спасибо, Markus® и Фанат
 
Сверху