2017-12-25 16 views
0

현재 아래 예제 스크립트를 사용하여 다음 배열 데이터 목록을 가져옵니다. 그리고 다음과 같은 순서로 표시됩니다.cakephp2에서 시간에 따라 데이터를 표시하는 방법은 무엇입니까?

$ datas = $ this-> MyDataModel-> getDataByArrayLists ($ listofids);

Array 
(
    [data] => Array 
     (
      [0] => Array 
       (
        [id] => 1 
        [my_name] => Joe 
        [my_home] => home1 
        [my_school] => school1) 
      [1] => Array 
       (
        [id] => 2 
        [my_name] => Bob 
        [my_home] => home2 
        [my_school] => school2 

내가 원하는 것은 마지막으로 클릭 한 시간에 따라 표시 할 데이터의 순서를 변경하는 것입니다. 나는 데이터베이스에서 그것을하고 싶지 않다. 시간은 쿠키 데이터에 다음 형식으로 저장되고 데이터를 정렬하는 데 사용하도록 계획됩니다. 예를 들어 (id 1은 Joe)이고 (id 2는 Bob입니다.) 위의 배열 데이터를 보면 Joe가 먼저 표시되고 Bob은 두 번째입니다. 그러나 다음 배열에서 id 2의 [time]이 마지막으로 클릭되었다는 것을 알 수 있듯이 Bob은 데이터의 0 인덱스에 있어야하고 Joe는 첫 번째 인덱스에 있어야합니다. 문제는 인덱스의 데이터 위치를 변경하고 표시 할 수있는 방법을 모른다는 것입니다.

Array 
     (
     [1] => Array 
     (
      [id] => 1 
      [time] => 2017-12-22 18:53:47 
     ) 
     , 
     [2] => Array 
     (
      [id] => 2 
      [time] => 2017-12-22 19:56:05 
     ) 

) 

일부 샘플 또는 팁이 유용 할 것입니다. 나는 너에게서 듣고 싶다!

답변

1

하지 최적화 된 솔루션, 당신은에 작동 할 수

$a = array(
     'data' => array(
      array(
       'id' => 1, 
       'name' => 'Joe', 
       'my_home' => 'Home 1' 
      ), 
      array(
       'id' => 2, 
       'name' => 'Bob', 
       'my_home' => 'Home 2' 
      ), 
      array(
       'id' => 3, 
       'name' => 'Alice', 
       'my_home' => 'Home 3' 
      ) 
     ) 
    ); 

    $b = array(
     array(
      'id' => 1, 
      'time' => '2017-12-22 18:53:47' 
     ), 
     array(
      'id' => 2, 
      'time' => '2017-12-22 19:53:47' 
     ) 
    ); 

    usort($a['data'], function($el1, $el2) use($b) { 
     $t1 = Hash::get(Hash::extract($b, "{n}[id=" . $el1['id'] . "]"), '0.time', 0); 
     $t2 = Hash::get(Hash::extract($b, "{n}[id=" . $el2['id'] . "]"), '0.time', 0); 
     return (is_string($t1) ? strtotime($t1) : 0) < (is_string($t2) ? strtotime($t2) : 0) ; 
    });