PHP: 배열을 값의 길이로 정렬하시겠습니까?
저는 아나그램 기계를 만들었고 저는 긍정적인 일치하는 것들을 가지고 있습니다.문제는 순서가 모두 다르다는 것입니다. 가장 긴 배열 값이 먼저 나타나도록 배열을 정렬할 수 있기를 원합니다.
이거 어떻게 하는지 아는 사람?
http://us2.php.net/manual/en/function.usort.php 사용
이 사용자 정의 기능을 사용하여
function sort($a,$b){
return strlen($b)-strlen($a);
}
usort($array,'sort');
이전 인덱스를 유지하려면 usort를 사용하고, 상관없으면 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);
});
이렇게 하면 글로벌 네임스페이스가 오염되지 않습니다.
그러나 이 작업은 소스 코드의 한 위치에서 건조 상태를 유지해야 할 경우에만 수행하십시오.
PHP7이 오고 있습니다.PHP7에서는 우주선 조작자를 사용할 수 있습니다.
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');
내림차순:
$array = ['aa', 'bb', 'c', 'ccc', 'a', 'ertre'];
usort($array, function($a, $b){
return strlen($a) < strlen($b);
});
var_export($array);
// Output
array (
0 => 'ertre',
1 => 'ccc',
2 => 'aa',
3 => 'bb',
4 => 'c',
5 => 'a',
)
오름차순:
$array = ['aa', 'bb', 'c', 'ccc', 'a', 'ertre'];
usort($array, function($a, $b){
return strlen($a) > strlen($b);
});
// Output
array (
0 => 'c',
1 => 'a',
2 => 'aa',
3 => 'bb',
4 => 'ccc',
5 => 'ertre',
)
array_multisort(array_map('count', $arr), SORT_DESC, $arr);
배열을 만듭니다.strlen
당신의 배열 요소의.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;
}
우주선 운영자를 사용하는 방법은 다음과 같습니다(PHP 7.0 필요).
$arr = ['apple','pear','oranges','banana'];
usort($arr, function ($a, $b) { return (strlen($a) <=> strlen($b)); });
print_r($arr);
다음은 함수 호출을 사용해서는 안 되는 이유를 정확히 보여주는 스니펫입니다.usort()
당신은 불필요하게 전화를 할 것입니다.strlen()
이전에 발견된 값에 대해 설명합니다.
내 9요소 배열에서,array_multisort()
호출들strlen()
9번, 하지만usort()
호출들strlen()
23번 -- 그건 부에노가 아닙니다.
코드: (데모)
function multisort($array) {
array_multisort(array_map('strlen', $array), SORT_DESC, $array);
printf(
"Total strlen() calls: %d\n%s\n---\n",
count($array),
var_export($array, true)
);
}
function usersort($array) {
usort(
$array,
function($a, $b) {
echo "strlen() called twice\n";
return strlen($b) <=> strlen($a);
}
);
var_export($array);
echo "\n---\n";
}
multisort($array);
usersort($array);
출력(자체 샘플 배열에서):
Total strlen() calls: 9
array (
0 => 'eight',
1 => 'seven',
2 => 'three',
3 => 'five',
4 => 'four',
5 => 'nine',
6 => 'one',
7 => 'six',
8 => 'two',
)
---
strlen() called twice
strlen() called twice
strlen() called twice
strlen() called twice
strlen() called twice
strlen() called twice
strlen() called twice
strlen() called twice
strlen() called twice
strlen() called twice
strlen() called twice
strlen() called twice
strlen() called twice
strlen() called twice
strlen() called twice
strlen() called twice
strlen() called twice
strlen() called twice
strlen() called twice
strlen() called twice
strlen() called twice
strlen() called twice
strlen() called twice
array (
0 => 'three',
1 => 'seven',
2 => 'eight',
3 => 'four',
4 => 'five',
5 => 'nine',
6 => 'one',
7 => 'two',
8 => 'six',
)
---
여기 제가 과거에 해왔던 방법이 있습니다.
// 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
'it-source' 카테고리의 다른 글
Spring Security : API용 JWT 토큰 및 웹용 세션 (0) | 2023.07.25 |
---|---|
현재 노드 버전 확인 (0) | 2023.07.25 |
HTML 페이지에 .png 이미지를 내장할 수 있습니까? (0) | 2023.07.25 |
단일 열 쿼리에 대한 DECODE(BLAH, [COLUMNT NUMBER])를 사용합니다.어떻게 작동합니까? (0) | 2023.07.25 |
삭제 - 대상 테이블을 지정할 수 없습니다. (0) | 2023.07.25 |