Programing

PHP : 값의 길이로 배열 정렬?

lottogame 2020. 12. 6. 20:53
반응형

PHP : 값의 길이로 배열 정렬?


저는 철자법 기계를 만들었고 긍정적 인 일치 항목이 여러 개 있습니다. 문제는 그것들이 모두 다른 순서로되어 있다는 것입니다. 가장 긴 배열 값이 먼저 나타나도록 배열을 정렬 할 수 있기를 원합니다.

아무도 이것을하는 방법에 대한 아이디어가 있습니까?


http://us2.php.net/manual/en/function.usort.php 사용

이 사용자 정의 기능으로

function sort($a,$b){
    return strlen($b)-strlen($a);
}

usort($array,'sort');

이전 인덱스를 유지하려면 uasort를 사용하고, 상관하지 않으면 usort를 사용하십시오.

또한 usort가 불안정한 정렬이기 때문에 내 버전이 더 좋다고 생각합니다.

$array = array("bbbbb", "dog", "cat", "aaa", "aaaa");
// mine
[0] => bbbbb
[1] => aaaa
[2] => aaa
[3] => cat
[4] => dog

// others
[0] => bbbbb
[1] => aaaa
[2] => dog
[3] => aaa
[4] => cat

PHP 5.3 방식으로 수행하고 싶다면 다음과 같이 만들 수 있습니다.

usort($array, function($a, $b) {
    return strlen($b) - strlen($a);
});

이렇게하면 글로벌 네임 스페이스를 오염시키지 않습니다.

그러나 DRY를 유지하기 위해 소스 코드의 단일 위치에서 필요한 경우에만이 작업을 수행하십시오.


PHP7이 출시됩니다. PHP7에서는 Spaceship Operator를 사용할 수 있습니다 .

usort($array, function($a, $b) {
    return strlen($b) <=> strlen($a);
});

이것이 앞으로 당신을 도울 수 있기를 바랍니다.


function sortByLength($a,$b){
  if($a == $b) return 0;
  return (strlen($a) > strlen($b) ? -1 : 1);
}
usort($array,'sortByLength');

strlenoyur 배열 요소 의 배열을 만들고 배열로 만듭니다 multisort.

foreach($Yourarray as $c=>$key) {               
    $key['maxlen'] = strlen($key);  
    $sort_numcie[] = $key['maxlen'];
}

array_multisort($sort_numcie, $Yourarray);  

이것은 확실히 작동합니다. 확실 해요!


허용되는 답변 외에도 오름차순 또는 내림차순으로 길이별로 배열을 정렬 하려면 다음을 수행하십시오.

function strlen_compare($a,$b){
    if(function_exists('mb_strlen')){
         return mb_strlen($b) - mb_strlen($a);
    }
    else{
         return strlen($b) - strlen($a);
    }
}

function strlen_array_sort($array,$order='dsc'){
    usort($array,'strlen_compare');
    if($order=='asc'){
        $array=array_reverse($array);
    }
    return $array;
}

여기 내가 과거에 한 방법이 있습니다.

// Here's the sorting...
$array = array_combine($words, array_map('strlen', $words));
arsort($array);

간단 해.

function LSort(a,b){return a.length-b.length;}

var YourArray=[[1,2,3,4,5,6], ['a','b'], ['X','Y','Z'], ['I','Love','You'], ['good man']];

YourArray.sort(Lsort);

결과:

['good man'] Length=1
['a','b'] Length=3
['X','Y','Z'] Length=3
['I','Love','You'] Length=3
[1,2,3,4,5,6] Length=6

참고 URL : https://stackoverflow.com/questions/838227/php-sort-an-array-by-the-length-of-its-values

반응형