Сортировать массив по алфавиту в PHP - PullRequest
0 голосов
/ 03 ноября 2018

Я создаю сайт для книжной издательской компании. У них есть книги на разных языках, и они хотят показать некоторые детали для каждого языка. Чтобы получить всю необходимую информацию для каждого языка, я делаю следующее:

  <div class="col-lg-3" align="center">
        <?php
            $fields = get_field_objects();                  
                if ($fields):
                    foreach ($fields as $name => $field):    
                        if (stripos($name, 'isbn') !== false) : ?>
                            <?php $lang = substr($field['name'], strpos($field['name'], "_")); ?>
                            <div class="panel-group">
                                <div class="panel panel-default">
                                    <div class="panel-heading">
                                        <h4 class="panel-title">
                                            <a data-toggle="collapse" href="#collapse1<?php echo $lang ?>">Deutsch/<?php echo substr($field['label'], strpos($field['label'], " ") + 1); ?></a>
                                        </h4>
                                    </div>
                                    <div id="collapse1<?php echo $lang ?>" class="panel-collapse collapse">
                                        <div class="panel-body">
                                      // ... get all neccessary information ...
                                       </div>
                                    </div>
                                </div>
                            </div>
                        <?php endif;
                    endforeach;
                endif; ?>
            </div>

Теперь моя проблема в том, что если кто-то создает книгу, забывает добавить язык и хочет добавить его после сохранения книги в базе данных, алфавитный порядок больше не является правильным. Поэтому я хотел бы добавить функцию сортировки для массива $ fields.

сортировка ($ fields) не работает, так как после этого все пусто.

Вот скриншот того, как выглядит вывод. enter image description here

А иногда, неправильный порядок (например, Deutsch / English появляется внизу). Поэтому мне придется отсортировать часть, где я добавляю второй язык (рядом с немецким). Часть, где я добавляю это здесь:

 <h4 class="panel-title">
    <a data-toggle="collapse" href="#collapse1<?php echo $lang ?>">Deutsch/<?php echo substr($field['label'], strpos($field['label'], " ") + 1); ?></a>
 </h4>

У кого-нибудь есть идеи? Пожалуйста, дайте мне знать, если код отсутствует!

P.S. плагин, который я использую, это «Advanced-Custom-Fields» и такие функции, как, например, get_field_objects () поставляется с этим плагином!

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Итак, моя проблема решается предложением @LeoTahk добавить ksort ().

Финальный код:

    <div class="col-lg-3" align="center">
      <?php
         $fields = get_field_objects();
//working solution
         ksort($fields);

         if($fields):
           ....
         endif; ?>
     </div>
0 голосов
/ 03 ноября 2018

get_field_objects() возвращает массив объектов пользовательских полей. Вы можете отсортировать их в алфавитном порядке, используя uasort, например:

$fields = get_field_objects();
uasort($fields,"sort_alphabetically");
function sort_alphabetically($a,$b) {
    return $a['name'] > $b['name'];
}
...