2014-12-04 5 views
0

내가정렬 다차원 배열은,

<?php 
    $guildname = str_replace(" ", "_", "Mutiny"); 
    $url = 'http://eu.battle.net/api/wow/guild/frostmane/'.$guildname.'?fields=members'; 
    $content = file_get_contents($url); 
    $json = json_decode($content, true); 

    array_multisort($json["members"], SORT_ASC); 

    foreach($json["members"] as $item) 
    {       
     echo 
     "<tr> 
      <td>" . $item['character']['name'] . "</td> 
      <td>" . $item['character']['class'] . "</td> 
      <td>" . $item['rank'] . "</td> 
     </tr>" 
     ; 
    } 
?>  

지금 이상한 일이 다음 코드를 사용하여 내 다차원 배열을 정렬 도움을 봤는데 (대신하는 A 중, P로 시작하는) 잘못된 첫 번째 항목을 제공합니다 내 배열은 첫 번째 항목을 제외하고 올바르게 정렬됩니다. 확인 this image 또는 예를 들어 아래 목록 :

  • Petterslayer
  • Albatra
  • Arrathas
  • Bengta
  • 비스킷
  • ...

SORT_STRING을하지 않는 추가 작업하고 오류를 제공합니다.

+0

있습니까? – Benjam

+0

이것은 API입니다 : http://eu.battle.net/api/wow/guild/frostmane/Mutiny?fields=members 그리고 이것은 내 정렬 목록에있는 잘못된 플레이어입니다 : { "character": { "" 이름 : ":"Petterslayer ","영역 ":"서리 뽑기 ","전투 그룹 ":"불행 " ... 내가 알 수있는 한 보이지 않는 문자는 없습니까? –

+0

원시 데이터를 가져 와서 16 진수로 보는 것으로 이름에 보이지 않는 문자가 없는지 확인할 수 있습니다. – Benjam

답변

0

당신과 같이 array_multisort()을 사용할 수 있습니다 : 먼저 정렬 할 원인이 될 수있다 'Petterslayer'앞에 보이지 않는 문자

$array = array 
(
[Baritone Horn] => Array 
    (
     [0] => Array 
      (
       [Name] => Baritone Maintenance 
       [Order] => 12 
       [CategoryID] => 13849839018 
      ) 

     [1] => Array 
      (
       [Name] => Baritone Mouthpieces 
       [Order] => 13 
       [CategoryID] => 13850963018 
      ) 

     [2] => Array 
      (
       [Name] => Accessories 
       [Order] => 11 
       [CategoryID] => 13850964018 
      ) 

    ) 

[Alpen Horn] => Array 
    (
     [0] => Array 
      (
       [Name] => Baritone Maintenance 
       [Order] => 12 
       [CategoryID] => 13849839018 
      ) 

     [1] => Array 
      (
       [Name] => Baritone Mouthpieces 
       [Order] => 13 
       [CategoryID] => 13850963018 
      ) 

     [2] => Array 
      (
       [Name] => Accessories 
       [Order] => 11 
       [CategoryID] => 13850964018 
      ) 

    ) 
) 

array_multisort($array); 
+0

그럼 사실상 코드를 단순히 으로 변경하면 '$ json = array_multisort ($ json);' 가 작동해야합니까? 나는 그것을 시도하고 있지만 그것은 배열을 정렬하지 않습니다. 정렬 기준으로 사용할 개체를 지정하지 않아도됩니까? 'print_r ($ json)'이라면 단순히 '1'을 출력합니다. –

+0

예, 이론상 더 자세히 읽을 수 있습니다 : http://php.net/manual/en/function.array-multisort.php – DrRoach

+0

정말 도와 주셔서 감사하지만 array_multisort를 사용하면 다음 오류가 표시됩니다. 메시지 : foreach()에 대해 잘못된 인수가 제공되었습니다. 이전과 같은 foreach를 사용하고 있습니다. –

1
<?php 
$json = file_get_contents ('https://eu.api.battle.net/wow/guild/Frostmane/Mutiny?fields=members&locale=en_GB&apikey=*'); 
$data = json_decode ($json, true); 

$entries = $data['members']; 

usort ($entries, 'sortByName'); 

var_dump ($entries); 

function sortByName ($entry1, $entry2) 
{ 
     $name1 = $entry1['character']['name']; 
     $name2 = $entry2['character']['name']; 

     return ord ($name1) - ord ($name2); 
} 
?> 
+0

URL을 작동시키지 못했지만 OP 원본 URL을 사용하면이 코드가 작동합니다. – Benjam

+0

OP에 대한 참고 사항, Petterslayer에 대한 항목에 배열의 'spec'부분이 없기 때문에 먼저 정렬되고있는 것으로 보입니다. 관계없이 정렬에는 정렬 함수가 고려하지 않은 차원이 더 많았습니다. 즉 '문자'다음에 '이름'입니다. – Benjam

+0

@Benjam URL에서 API 키를 제거했습니다. 그것은 아마 이유 일 것입니다.) – RobinJ