在PHP中按字母顺序对数组进行排序

时间:2018-11-03 11:40:24

标签: php arrays wordpress sorting advanced-custom-fields

我正在为一家图书出版公司创建一个网站。他们有多种不同语言的书籍,并希望显示每种语言的一些详细信息。要检索每种语言的所有必要信息,请执行以下操作:

  <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数组添加一个排序功能。

sort($ fields)不起作用,因为执行此操作后,所有内容均为空白。

这是输出外观的屏幕截图。 enter image description here

有时,顺序是错误的(例如,德语/英语显示在底部)。因此,我必须对添加第二种语言(德语附近)的部分进行排序。我添加此内容的部分在这里:

 <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。我使用的插件是“高级自定义字段”,其功能例如该插件附带了“ get_field_objects()”!

2 个答案:

答案 0 :(得分:0)

get_field_objects()返回自定义字段对象的数组。您可以像这样使用uasort按字母顺序对其进行排序:

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

答案 1 :(得分:0)

所以解决我问题的是@LeoTahk建议添加ksort()。

最终代码:

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

         if($fields):
           ....
         endif; ?>
     </div>