2016-12-12 1 views
0

나는 언어의 배열 생성 PHP는 다음했습니다배열의 특정 요소를 항상 중간에 유지하는 방법은 무엇입니까? 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" 
    } 
} 

참고 :이 순서는 무작위이며 현재 규칙은 항상 중간에 있어야한다는 것이 중요합니다.

+1

왜 'cur'가 중간이되어야합니까? '$ list [ "cur"]'로 액세스 할 수 없습니까? –

+1

배열이 커지지 않고 오버 헤드에 신경 쓸 필요가 없다면 현재 언어의 색인을 저장할 수 있고 동시에 "중간"요소에 대한 참조를 저장할 수 있으며 루프가 끝나면 두 개를 바꿀 수 있습니다 요소 – flynorc

+0

@ JonathanWheeler는 왜 일생 일대의 질문이 아닙니까? :) –

답변

0

의 중간에 다시 삽입 @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; 
    } 

} 
0

내가 말할 것이다 :

1

) 전류를 검색하고 배열에서 제거

2)에 의해 제안하고 배열

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