php 배열 sort 질문 드립니다.

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!
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);


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

회원로그인

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