【问题标题】:how to keep specific element of array always in the middle? php如何将数组的特定元素始终保持在中间? php
【发布时间】:2016-12-12 00:19:27
【问题描述】:

我正在关注生成语言数组的 php:

<?php
/**
 * Language chooser for qtranslate-x plugin
 *
 * @package
 */

function get_language_list() {

    if ( function_exists( 'qtranxf_getSortedLanguages' ) ) {

        global $q_config;

        $list = array();
        foreach ( qtranxf_getSortedLanguages() as $key => $language ) {
            $list[] = array(
                'url' => qtranxf_convertURL( '', $language, false, true),
                'lan' => $q_config['language_name'][ $language ],
                'cur' => $language == $q_config['language'] ? 'current' : '',
            );
        }



        return $list;
    }

}

它很棒,但我需要重写这个数组,使具有'cur' == 'current' 的元素始终位于中间,例如键是 1。

数组有 3 个元素。转储看起来像这样:

array(3) {
  [0]=>
  array(3) {
    ["url"]=>
    string(24) ".dev/en/"
    ["lan"]=>
    string(7) "English"
    ["cur"]=>
    string(0) ""
  }
  [1]=>
  array(3) {
    ["url"]=>
    string(24) ".dev/ka/"
    ["lan"]=>
    string(21) "ქართული"
    ["cur"]=>
    string(0) ""
  }
  [2]=>
  array(3) {
    ["url"]=>
    string(24) ".dev/ru/"
    ["lan"]=>
    string(14) "Русский"
    ["cur"]=>
    string(7) "current"
  }
}

注意,问题是这个顺序是随机的,唯一的规则是当前的顺序应该总是在中间。

【问题讨论】:

  • 为什么需要cur 成为中间人?您不能以$list["cur"] 的身份访问它吗?
  • 如果你的数组不会很大并且你不介意开销,你可以存储当前语言的索引,同时也存储对“中间”元素的引用和在循环之后只需交换这两个元素
  • @JonathanWheeler 为什么不是一个短暂的问题? :)
  • @flynorc 这是个主意。

标签: php arrays


【解决方案1】:

我会说:

1) 搜索当前并将其从数组中删除

2) 然后将其重新插入到数组的中间

$current = array_splice($list, 
    array_search('current', array_column($list, 'cur')), 1);
array_splice($list, round(count($list)/2), 0, $current);

【讨论】:

    【解决方案2】:

    @flynorc 建议

    /**
     * Language chooser for qtranslate-x plugin
     *
     * @package marcopolo
     */
    
    function get_language_list() {
    
        if ( function_exists( 'qtranxf_getSortedLanguages' ) ) {
    
            global $q_config;
    
            $list = array();
            foreach ( qtranxf_getSortedLanguages() as $key => $language ) {
                if ( $language == $q_config['language'] ) {
                    $cur = true;
                    $cur_key = $key;
                } else {
                    $cur = false;
                }
                $list[ $key ] = array(
                    'url' => qtranxf_convertURL( '', $language, false, true),
                    'lan' => $q_config['language_name'][ $language ],
                    'cur' => $cur,
                );
            }
    
            $middle = $list[1];
            $list[1] = $list[ $cur_key ];
            $list[ $cur_key ] = $middle;
    
            return $list;
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-18
      • 2021-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-11
      • 2011-01-27
      相关资源
      最近更新 更多