Multisorting Multidimension Array

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
Άβαταρ μέλους
Cha0s
SysAdmin
Δημοσιεύσεις: 10242
Εγγραφή: 28 Ιούλ 2001 03:00

Multisorting Multidimension Array

Δημοσίευση από Cha0s » 02 Οκτ 2007 15:50

Λοιπόν έχω το εξής array:

Κώδικας: Επιλογή όλων

Array
(
    [0] => Array
        (
            [perms] => drwxr-xr-x
            [number] => 2
            [owner] => wirc
            [group] => wirc
            [size] => 4096
            [month] => Sep
            [day] => 26
            [time] => 07:51
            [name] => test
        )

    [1] => Array
        (
            [perms] => drwx--x--x
            [number] => 22
            [owner] => wirc
            [group] => wirc
            [size] => 4096
            [month] => Oct
            [day] => 1
            [time] => 09:57
            [name] => www
        )

)
Είναι μία δυναμική λίστα αρχείων μέσω FTP functions και θέλω να το κάνω sort ώστε να μου δείχνει στον πίνακα που το τυπώνω πρώτα τους φακέλους αλφαβητικά και ύστερα τα αρχεία αλφαβητικά.

Η διαφορά μεταξύ αρχείων και φακέλων είναι ότι στο πεδίο perms το πρώτο γράμμα (d) σημαίνει directory ενώ όταν είναι αρχείο έχει παύλα.
Δεν χρειάζεται κάτι ιδιαίτερο γιαυτό. Απλά ένα sorting πάνω σε αυτό θα χωρίζει όσα ξεκινάνε από D με όσα ξεκινάνε με -.


Έχω σκαλώσει άσχημα και δεν βρίσκω τρόπο να κάνω sort ταυτόχρονα και στα 2 πεδία (πρώτα στο perms και ύστερα στο name)

Any ideas?

Άβαταρ μέλους
Cha0s
SysAdmin
Δημοσιεύσεις: 10242
Εγγραφή: 28 Ιούλ 2001 03:00

Multisorting Multidimension Array

Δημοσίευση από Cha0s » 02 Οκτ 2007 16:47

Just for the record:

Κώδικας: Επιλογή όλων

  function compare($a, $b)
  {

    if ( substr($a['perms'], 0,1) == '-'){
    $a['perms'] = 'f';
    }

    if ( substr($b['perms'], 0,1) == '-'){
    $b['perms'] = 'f';
    }

    $retval = strnatcmp(substr($a['perms'], 0,1), substr($b['perms'], 0,1));
    if(!$retval) return strnatcmp($a['name'], $b['name']);
    return $retval;
  }

  usort($test, 'compare');
Όπου $test το array :)

Με έσκισε αλλά το έβγαλα :D

Άβαταρ μέλους
nikirtsi
Δημοσιεύσεις: 169
Εγγραφή: 02 Ιουν 2006 16:35

Multisorting Multidimension Array

Δημοσίευση από nikirtsi » 03 Οκτ 2007 11:23

Νά καί μιά ακόμα λύσι γιά πολλαπλή ταξινόμησι.

Κώδικας: Επιλογή όλων

<?php
function array_sort_multi2&#40;$array, $key,$key2&#41;

&#123;
  for &#40;$i = 0; $i < sizeof&#40;$array&#41;; $i++&#41; &#123;
       if&#40;! empty&#40;$array&#91;$i&#93;&#91;$key&#93;&#91;$key2&#93;&#41;&#41;&#123;
       $sort_values&#91;$i&#93; = $array&#91;$i&#93;&#91;$key&#93;&#91;$key2&#93;;
       &#125;else&#123;
       $sort_values&#91;$i&#93; = $array&#91;$i&#93;;
       &#125;
  &#125;
  asort &#40;$sort_values&#41;;
  reset &#40;$sort_values&#41;;
  while &#40;list &#40;$arr_keys, $arr_values&#41; = each &#40;$sort_values&#41;&#41; &#123;
         $sorted_arr&#91;&#93; = $array&#91;$arr_keys&#93;;
  &#125;
  return $sorted_arr;
&#125;
?>
Ακόμα και ο ήλιος, στό αριστερό μελίγγι μου ανατέλλει καί στό ζερβό δύει.

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες