이 객체 배열을 필드 중 하나 name
또는로 정렬하려면 어떻게 count
해야합니까?
Array
(
[0] => stdClass Object
(
[ID] => 1
[name] => Mary Jane
[count] => 420
)
[1] => stdClass Object
(
[ID] => 2
[name] => Johnny
[count] => 234
)
[2] => stdClass Object
(
[ID] => 3
[name] => Kathy
[count] => 4354
)
....
답변
usort 사용하십시오 . 다음은 매뉴얼에서 수정 된 예입니다.
function cmp($a, $b) {
return strcmp($a->name, $b->name);
}
usort($your_data, "cmp");
두 번째 인수로 모든 호출 가능 항목 을 사용할 수도 있습니다 . 여기 몇 가지 예가 있어요.
-
익명 함수 사용하기 (PHP 5.3부터)
usort($your_data, function($a, $b) {return strcmp($a->name, $b->name);});
-
수업 내에서
usort($your_data, array($this, "cmp")); // "cmp" should be a method in the class
-
화살표 함수 사용하기 (PHP 7.4부터)
usort($your_data, fn($a, $b) => strcmp($a->name, $b->name));
또한 숫자 값을 비교 fn($a, $b) => $a->count - $b->count
하는 경우 “비교”기능이 트릭을 수행해야합니다.
답변
클로저를 사용하는 더 좋은 방법
usort($your_data, function($a, $b)
{
return strcmp($a->name, $b->name);
});
이것은 PHP 문서에는 없지만 5.3 이상의 클로저를 사용하는 경우 호출 가능한 인수가 제공 될 수있는 곳에서 지원됩니다.
답변
정수 값을 정렬하려면 다음을 수행하십시오.
// Desc sort
usort($array,function($first,$second){
return $first->number < $second->number;
});
// Asc sort
usort($array,function($first,$second){
return $first->number > $second->number;
});
문자열로 업데이트 하면 동일한 레지스터 (위 또는 아래)로 변환하는 것을 잊지 마십시오
// Desc sort
usort($array,function($first,$second){
return strtolower($first->text) < strtolower($second->text);
});
// Asc sort
usort($array,function($first,$second){
return strtolower($first->text) > strtolower($second->text);
});
답변
당신이 PHP는 OOP를 사용하는 경우 당신을 변경해야 할 수도 있습니다 :
public static function cmp($a, $b)
{
return strcmp($a->name, $b->name);
}
//in this case FUNCTION_NAME would be cmp
usort($your_data, array('YOUR_CLASS_NAME','FUNCTION_NAME'));
답변
usort($array, 'my_sort_function');
var_dump($array);
function my_sort_function($a, $b)
{
return $a->name < $b->name;
}
count
필드 와 동일한 코드가 사용됩니다 .
에 대한 자세한 내용 usort
: http://ru2.php.net/usort
Btw, 그 어레이를 어디서 얻었습니까? 나는 데이터베이스에서 그것을 원하지 않습니까?
답변
이 기능을 사용할 수 있습니다 (PHP 버전> = 5.3에서 작동).
function sortArrayByKey(&$array,$key,$string = false,$asc = true){
if($string){
usort($array,function ($a, $b) use(&$key,&$asc)
{
if($asc) return strcmp(strtolower($a{$key}), strtolower($b{$key}));
else return strcmp(strtolower($b{$key}), strtolower($a{$key}));
});
}else{
usort($array,function ($a, $b) use(&$key,&$asc)
{
if($a[$key] == $b{$key}){return 0;}
if($asc) return ($a{$key} < $b{$key}) ? -1 : 1;
else return ($a{$key} > $b{$key}) ? -1 : 1;
});
}
}
예:
sortArrayByKey($yourArray,"name",true); //String sort (ascending order)
sortArrayByKey($yourArray,"name",true,false); //String sort (descending order)
sortArrayByKey($yourArray,"id"); //number sort (ascending order)
sortArrayByKey($yourArray,"count",false,false); //number sort (descending order)
답변
다음 usort
과 같이 사용할 수 있습니다 .
usort($array,function($first,$second){
return strcmp($first->name, $second->name);
});