테스트 사이트 - 개발 중인 베타 버전입니다

php 배열 sort 질문 드립니다. 채택완료

망고프리 2년 전 조회 2,069

안녕하세요.

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

 

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

 

[1] 바나나

[100] 사과

[150] 오렌지

[200] 딸기

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

댓글을 작성하려면 로그인이 필요합니다.

답변 3개

채택된 답변
+20 포인트
s
2년 전

</p>

<pre>
$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);</pre>

<p>

 

이렇게 해보세요.

로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

s
swallow
2년 전
만일 배열이
$fruits = array("[100] 사과" , "[1] 바나나" , "[200] 딸기" , "[150] 오렌지"); 이라면
asort($fruits , SORT_STRING | SORT_FLAG_CASE | SORT_NATURAL);
var_dump($fruits);
아마 잘 될겁니다.
망고프리
2년 전
안녕하세요. 너무 잘되네요.
감사합니다.

댓글을 작성하려면 로그인이 필요합니다.

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

 

위 배열이 잘못되었네요

이 내용입니다.

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

그누위즈
2년 전
[code]

$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);


[/code]

댓글을 작성하려면 로그인이 필요합니다.

그누위즈

</p>

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

ksort($fruits);

print_r($fruits);</p>

<p>

로그인 후 평가할 수 있습니다

답변에 대한 댓글 3개

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

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

이런순으로 나옵니다.
그누위즈
2년 전
[code]
$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);
[/code]
망고프리
2년 전
안녕하세요.
배열 내용이 잘못되었네요
아래 내용으로 넣어서 테스트 해보시면 sort가 안되네요.

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

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인