سؤال

هل هناك طريقة بسيطة لفرز مكرر في PHP (دون سحب كل شيء إلى مصفوفة وفرز ذلك).

المثال المحدد لدي هو DirectoryIterator ولكن سيكون من الجيد أن يكون هناك حل عام لأي مكرر.

$dir = new DirectoryIterator('.');
foreach ($dir as $file)
    echo $file->getFilename();

أود أن أكون قادرًا على فرز هذه العناصر حسب معايير مختلفة (اسم الملف، الحجم، إلخ)

هل كانت مفيدة؟

المحلول

وليس هناك طريقة للقيام بذلك. يجب مكرر "أعاد" من خلال القائمة. لديك لفرز القائمة الأساسية لتحقيق السلوك المطلوبة.

وبالمناسبة، فإن الإشارة أكثر اكتمالا لSPL هنا هو: http://www.php.net/~helly/php/ext/spl/

نصائح أخرى

بالنسبة لأولئك الذين ينتهي بهم الأمر هنا بعد 5 سنوات:

إذا قمت بجعل Iterator امتدادًا لـ ArrayIterator، فيمكنك استخدامه

ArrayIterator::uasort (للفرز حسب القيمة) وArrayIterator::uksort (للفرز حسب المفتاح)

http://php.net/manual/en/arrayiterator.uasort.php

http://php.net/manual/en/arrayiterator.uksort.php

وسيكون لديك للحد من استخدام iterator_to_array () ثم uasort (). و، في بلدي اختبار الأداء وسريعة بما فيه الكفاية.

لمثال محدد الخاص بك، فإن الطريقة الأكثر المدمجة وأنا أعلم باستخدام التكرارات هي التالية:

// get (recursively) files matching a pattern, each file as SplFileInfo object
$matches = new RegexIterator(
               new RecursiveIteratorIterator(
                   new RecursiveDirectoryIterator('/path/to/files/')
               ),
               '/(\.php|\.ini|\.xml)$/i'
            );
 $files = iterator_to_array($matches);

// sort them by name
uasort($files, create_function('$a,$b', 'return strnatcasecmp($a->getFilename(), $b->getFilename());'));
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top