>source

3 개의 배열을 포함하는 객체가 있습니다.할 수있다비어 있으면 세 가지 모두 비어있을 수 있으므로 해당 요구 사항도 처리해야합니다.

다음은 개체의 예입니다.

{
    "lang_read": [],
    "lang_write": ["es", "ca", "zh", "en", "de", "he", "it", "ar", "ko", "pt", "ru"],
    "lang_listen": ["es", "ca", "en", "fr"]
}

이 3 개의 배열을 기존 키를 사용하여 고유 한 값이있는 단일 배열로 병합하여 출력에 병합 된 배열이 가져온 배열에 대한 참조가 포함되도록해야합니다. 또한 출력은취하다순서대로 배열 lang_listen , lang_read 그때 lang_write .

최종 사용자가 하나의 옵션 만 선택할 수 있도록 출력을 통해 이러한 항목이 HTML 선택 목록에 나열되어야합니다.

나는 이것을 시도하고 고유 값에 대한 배열을 병합했지만 순서 요구 사항과 값이 원래 다음과 같은 배열을 참조하기위한 키 요구 사항에 갇혀 있습니다.

$mergedLanguages = array_unique(array_merge($languages->lang_listen, $languages->lang_read, $languages->lang_write), SORT_REGULAR);

그러나 이것은 숫자 키가있는 새 배열을 생성했으며 값이 원래 어떤 배열에서 왔는지 참조 할 방법이 없습니다.

원하는 출력의 예로서 완전히 부정확 할 수 있습니다.

{
    "languages": [
        "lang_listen" => array("es", "ca", "en", "fr"), 
        "lang_write" => array("zh", "de", "he", "it", "ar", "ko", "pt", "ru")
    ]
}

그런 다음 다음과 같은 HTML 선택 목록을 작성해야합니다.

echo '<select>';
foreach ($languages as $namedIndex => $arrayValues) {
   foreach ($arrayValues as $value) {
      echo '<option value="'.$value.'" data-type="'.$namedIndex.'">'.$value.'</option>';
   }
}
echo '</select>';

우선 순위가 lang_listen > lang_read > lang_write , 같이 "es", "ca", "en" 둘 다에 존재 lang_readlang_listen , 이것들은 lang_listen 우선 순위가 있기 때문에 lang_read .

누구든지 최선의 접근 방식과 그것을 달성하는 방법을 조언 할 수 있습니까? 감사!

  • 답변 # 1

    입력 배열에 숫자 키가있는 경우 array_merge는 출력 배열의 번호를 다시 매 깁니다.

    이를 피하기 위해 간단한 + 어레이에 대한 작업 :

    왼쪽 피연산자 배열에 키가 있으면 오른쪽 피연산자에서 추가되지 않습니다.

    <?php
    $lang_read = [];
    $lang_write = ["es", "ca", "zh", "en", "de", "he", "it", "ar", "ko", "pt", "ru"];
    $lang_listen = ["es", "ca", "en", "fr"];
    $result = $lang_listen + $lang_read  + $lang_write;
    print_r($result);
    /*
    Array
    (
        [0] => es
        [1] => ca
        [2] => en
        [3] => fr
        [4] => de
        [5] => he
        [6] => it
        [7] => ar
        [8] => ko
        [9] => pt
        [10] => ru
    )
    */
    
    

    그러나 항목의 출처에 대한 정보는 여전히 제공하지 않습니다. 이 정보를 얻으려면 배열을 재정렬하여 언어 코드가 키에 있고 값은 소스를 저장합니다.

    이를 위해 array_fill_keys를 사용할 수 있습니다.

    
    <?php
    $lang_read = ["he", "en"];
    $lang_write = ["es", "ca", "zh", "en", "de", "he", "it", "ar", "ko", "pt", "ru"];
    $lang_listen = ["es", "ca", "en", "fr"];
    $result = array_fill_keys($lang_listen, 'listen')
            + array_fill_keys($lang_read, 'read')
            + array_fill_keys($lang_write, 'write');
    print_r($result);
    /*
    Array
    (
        [es] => listen
        [ca] => listen
        [en] => listen
        [fr] => listen
        [he] => read
        [zh] => write
        [de] => write
        [it] => write
        [ar] => write
        [ko] => write
        [pt] => write
        [ru] => write
    )
    */
    
    

관련 자료

  • 이전 python - 암호화 된 rsa 메시지 python3을 디코딩 할 수 없습니다
  • 다음 html - primeng p- 체크 박스 - 레이블 뒤에 별표 필수 기호 추가