2012-03-18 4 views
-5

의 첫 번째 차원의 배열을 정렬 나는이 배열 구조를 내가 종류의 첫 번째 차원에 DDS 먼저 될 않도록 어떻게PHP - 2 차원 배열

Array 
(
    [xyz] => Array 
     (
      [1] => 3 
      [0] => s 
     ) 

    [dds] => Array 
     (
      [a] => 96 
      [d] => 4 

     ) 
... 
) 

있습니다. ksort는 (적어도 나를 위해) 작동하지 않습니다.

TIA

편집 여기 내 간단한 코드입니다. 직렬화 된 2D 배열 파일을 변수로 읽어 들여서 일종의 복잡한 작업을 수행합니다. 문제없이 ksort가 제 1D 배열에서 작동합니다. ksort 행을 주석 처리하면 오류없이 실행됩니다.

$inputfile = "xxx/result.txt";  
$builta = file_get_contents($inputfile); 
$built =unserialize($builta); 
    $size = sizeof($built); 
    echo $size; 

    echo "<br><pre>"; 
    print_r ($built); 
    echo "</pre>"; 

    ksort($built); 

    echo "<br><pre>"; 
    print_r ($built); 
    echo "</pre>"; 

복잡한 것은 없습니다.

업데이트 : 큰 배열을 처리 할 때 더 많은 오류가 발생하면 ksort의 문제는 큰 배열을 정렬 할 수있는 충분한 메모리가없는 것으로 나타났습니다. tpaksu가 제공하는 솔루션은 훌륭한 해결 방법입니다.

+0

여기서 명시하자 : ksort 함수를 잘못 사용하고 있습니다. 설명서를 살펴보고 작동 방식을 확인하고 즐거운 시간 보내십시오. 방법을 알면 쉽습니다. 어떻게 배우지 않으면 어렵습니다. 쉬운 시작을하기 위해 설명서의 ksort는 http://php.net/ksort에 있습니다. 매개 변수, 반환 유형 및 주어진 예제를 항상 읽으십시오. – hakre

답변

1

귀하의 배열 이름이 $ my_array라고 가정합니다. 다음과 같은 것을 사용할 수 있습니다 :

<?php 
$my_array = array(z => array(p=>1,gf=>"d"),v=>array(l=>"m",fr=>"3")); 
var_dump($my_array); 

$sorted_keys = array_keys($my_array); 
sort($sorted_keys,SORT_STRING); 
$new_array = array(); 

var_dump($sorted_keys); 

foreach($sorted_keys as $key){ 
    $new_array[$key] = $my_array[$key]; 
} 

var_dump($new_array); 

?> 

하지만 ksort가 더 좋고 더 간단합니다.

편집 : 죄송합니다. 인라인 함수로 정렬을 사용하는 것은 실수였습니다. 여기에 업데이트되고 테스트 된 코드가 있습니다.

+0

감사합니다 tpaksu,하지만이 중 하나 나를 위해 작동하지 않습니다, 잘못된 outarch로 제공된 오류로 outach(). 예, 변수 이름이 올바른지 확인했습니다. – Jamex

+0

코드를 업데이트했습니다. –

+0

시간 내 주셔서 감사합니다. 코드는 훌륭하게 작동하지만, (제 2D 배열에 대해) 엄청난 양의 메모리를 소비합니다. – Jamex

2

ksort을 사용하십시오.

ksort($array); 
+0

안녕하세요 Dogbert, 작동하지 않습니다. 물어보기 전에 방금 시도했습니다. – Jamex

+0

@ Jamex 작동하지 않는 코드를 게시 할 수 있습니까? – Dogbert

+0

배열이 $ xxx이면, $ xxx = ksort ($ xxx); – Jamex

0

키를 기반으로 배열을 정렬하는 PHP 함수 uksort()이 있습니다. 그러나 자신 만의 비교 함수를 만들어야합니다.
당신은이 함수의 문서를 얻을 수 있습니다. here.