php 배열 sort 질문 드립니다.

php 배열 sort 질문 드립니다.

QA

php 배열 sort 질문 드립니다.

본문

안녕하세요.

내용중에 대괄호가 있으면 sort가 안되네요

 

$fruits = array("[100] 사과" => 2, "[1] 바나나" => 3, "[200] 딸기" => 1, "[150] 오렌지" => 4);
sort($fruits);
print_r($fruits);

 

[1] 바나나

[100] 사과

[150] 오렌지

[200] 딸기

이렇게 순서대로 나오게 할수는 없는건가요?

이 질문에 댓글 쓰기 :

답변 3



$array = array("[100] 사과" => 2, "[1] 바나나" => 3, "[200] 딸기" => 1, "[150] 오렌지" => 4);
$keys = array_keys($array);

//sort($keys);
asort($keys, SORT_STRING | SORT_FLAG_CASE | SORT_NATURAL);

$result = array_combine($keys, array_values($array));


var_dump($result);

 

이렇게 해보세요.

만일 배열이
$fruits = array("[100] 사과" , "[1] 바나나" , "[200] 딸기" , "[150] 오렌지"); 이라면
asort($fruits , SORT_STRING | SORT_FLAG_CASE | SORT_NATURAL);
var_dump($fruits);
 아마 잘 될겁니다.


$fruits = array("[100] Apples" => 2, "[1] Bananas" => 3, "[200] Strawberries" => 1, "[150] Oranges" => 4);
ksort($fruits);
print_r($fruits);

안녕하세요.
실행시키면
Array ( [[100] Apples] => 2 [[150] Oranges] => 4 [[1] Bananas] => 3 [[200] Strawberries] => 1 )

[100] Apples
[1] Bananas
[200] Strawberries
[150] Oranges

이런순으로 나옵니다.


$fruits = array("[100] Apples" => 2, "[1] Bananas" => 3, "[200] Strawberries" => 1, "[150] Oranges" => 4);

uksort($fruits, function($a, $b) {
    preg_match('/\[(\d+)\]/', $a, $matchesA);
    preg_match('/\[(\d+)\]/', $b, $matchesB);
    $numberA = isset($matchesA[1]) ? $matchesA[1] : 0;
    $numberB = isset($matchesB[1]) ? $matchesB[1] : 0;
    return $numberA - $numberB;
});

print_r($fruits);

안녕하세요.
배열 내용이 잘못되었네요
아래 내용으로 넣어서 테스트 해보시면 sort가 안되네요.

$fruits = array("[100] Apples", "[1] Bananas", "[200] Strawberries", "[150] Oranges");

$fruits = array("[100] 사과" , "[1] 바나나" , "[200] 딸기" , "[150] 오렌지");
sort($fruits);
print_r($fruits);

 

위 배열이 잘못되었네요

이 내용입니다.



$fruits = array("[100] Apples", "[1] Bananas", "[200] Strawberries", "[150] Oranges");

usort($fruits, function($a, $b) {
    preg_match('/\[(\d+)\]/', $a, $matchesA);
    preg_match('/\[(\d+)\]/', $b, $matchesB);
    $numberA = isset($matchesA[1]) ? $matchesA[1] : 0;
    $numberB = isset($matchesB[1]) ? $matchesB[1] : 0;
    return $numberA - $numberB;
});

print_r2($fruits);


답변을 작성하시기 전에 로그인 해주세요.
전체 451
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT