2017-05-16 3 views
1

나는 array_multisort()를 사용하는 데 어려움을 겪고있다.array_multisort()를 사용하여 PHP에서 객체 배열을 정렬하려면 어떻게합니까?

"1":{"title": "It's a fixer-upper of a planet but we could make it work", 
    "post_date": "1454889600", 
    "author": "Elon Musk", 
    "content": "<p>We choose to go to the moon in this decade and do the other things...</p>", 
    "category": [ "mars", "space travel" ] },  

    "2":{"title": "Failure is not an option", 
    "post_date": "1456099200", 
    "author": "Gene Kranz", 
    "content": "<p>Dinosaurs are extinct today because ...</p>", 
    "category": [ "mis-quoted", "apollo 13" ] }, 

... 등 내가 PHP에서 파일을 얻을

, 디코드 : 나는 다섯 개체를이 형식의 블로그 게시물에 대한 데이터를 각각의 배열 인 JSON에서 검색 한 일부 데이터를 정렬하고있어 JSON을 연관 배열에 추가 한 다음 내가 작업 한 사람이 읽을 수있는 날짜 배열을 만듭니다. 나는 5 개의 물체로 이루어진 배열을 가지고 있으며 배열을 날짜로 정렬해야한다. 다음 array_multisort 사용하려고 및 작동 구문을 찾을 보일 수 없습니다. 어떤 도움을 주시면 감사하겠습니다. 아무리 어려워도 Google에서는 검색 문자열을 올바르게 표시 할 수 없습니다. 도와주세요?

<?php //This part I'm confident is working. 
    $json = file_get_contents("./data/posts.json"); 
    $json_content = json_decode($json, true); 
    $date_sort = array(); 

    //Sorting the Array - this part seems to work 
    foreach ($json_content as $postObj) { 
     $post_date_human = date ('Y-m-d', $postObj['post_date']); 
     array_push($date_sort, $post_date_human); 
    } 
    print_r ($date_sort); //Seems to be working fine, now to try to sort one array of objects by the position of dates in the second array 

    // Wai u no werk!? 
    array_multisort($json_content, $date_sort = SORT_ASC); 
    print_r ($json_content); 
+1

죄송합니다. 정말로하고 싶은게 있습니까? – Nidhi

+0

array_multisort() 메소드를 사용하여 게시 된 날짜별로 블로그 게시물을 가장 오래된 것부터 가장 오래된 날짜 순으로 정렬하고 싶습니다. :) –

+0

아래에서 내 소식을 읽는 것은 혼자서 해결 한 것처럼 보입니다. 맞습니까? – Nidhi

답변

0

편집 : 자세한 내용을 보려면 다음 사이트를 방문

$json_content = msort($json_content, "post_date"); 

And heres the function itself: 

/** 
* Sort a 2 dimensional array based on 1 or more indexes. 
* 
* msort() can be used to sort a rowset like array on one or more 
* headers (keys in the 2th array). 
* 
* @param array  $array  The array to sort. 
* @param string|array $key  The index(es) to sort the array on. 
* @param int   $sort_flags The optional parameter to modify the sorting 
*         behavior. This parameter does not work when 
*         supplying an array in the $key parameter. 
* 
* @return array The sorted array. 
*/ 
function msort($array, $key, $sort_flags = SORT_REGULAR) { 
    if (is_array($array) && count($array) > 0) { 
     if (!empty($key)) { 
      $mapping = array(); 
      foreach ($array as $k => $v) { 
       $sort_key = ''; 
       if (!is_array($key)) { 
        $sort_key = $v[$key]; 
       } else { 
        // @TODO This should be fixed, now it will be sorted as string 
        foreach ($key as $key_key) { 
         $sort_key .= $v[$key_key]; 
        } 
        $sort_flags = SORT_STRING; 
       } 
       $mapping[$k] = $sort_key; 
      } 
      asort($mapping, $sort_flags); 
      $sorted = array(); 
      foreach ($mapping as $k => $v) { 
       $sorted[] = $array[$k]; 
      } 
      return $sorted; 
     } 
    } 
    return $array; 
} 

Sort multidimensional array by multiple keys 여기에 PHP의 문서를 무시 : 주석을 읽는 이와 같은 가치가 있었다 다른 스레드를 확인한 후 내가 가진 http://php.net/manual/en/function.array-multisort.php

내 array_multisort() 정렬에 의해 제공된 배열을 사용하여 작동하는 코드는 제공된 첫 번째 배열입니다. 다시 말하지만 array_multisort()에 전달 된 첫 번째 인수는 정렬 할 배열이 아니라 SORTED BY입니다. 이것은 PHP 문서에 반하는 것이지만 작동하는 것 같습니다. 내 코드에서 오작동이나 실수로 왜 작동하는지 알게되면 알려주십시오. 그때까지 내 코드에 대한 수정은 다음과 같습니다.

array_multisort ($ date_sort, SORT_DESC, $ json_content);

$ date_sort는 가장 최근 날짜를 먼저 내림차순으로 정렬 한 다음 첫 번째 정렬 순서에 따라 개체의 두 번째 배열을 정렬하는 것처럼 보입니다. Excel과 같은 프로그램이 단일 열을 기반으로 테이블을 정렬하는 방법에 대해 생각해 보았습니다.

의견을 보내고 질문 할 시간을내어 주셔서 감사합니다. 그것 모두는 결국 문서의 말씨가 반대로 보였다는 것을 알아내는 데 도움이되었습니다. (정렬 된 배열 자체는 물론 정렬되었습니다.)하지만 함수 호출의 의도는 아니며 다른 배열입니다. 그 자체는 첫 번째 배열을 기준으로 정렬됩니다.)