2016-06-30 4 views
2

현재 Mailchimp API로 작업 중이며 실행되었거나 실행 예정인 캠페인 목록이 있으며 해당 항목에 대한 링크를 얻고 싶습니다. 가장 최근에 실행 된 캠페인 어떻게 "send_time"속성을 비교하여 가장 최근의 것을 찾고 속성 객체가 부모 객체인지를 알 수 있습니까?속성 값을 기준으로 개체를 선택하는 개체 배열

선거 운동 배열은 다음과 같습니다,

{ 
    "campaigns": [ 
     { 
      "id": 1, 
      "type": "regular", 
      "status": "save", 
      "send_time": "" 
     }, 
     { 
      "id": 2, 
      "type": "regular", 
      "status": "sent", 
      "send_time": "2015-11-11T14:42:58+00:00" 
     }, 
     { 
      "id": 3, 
      "type": "regular", 
      "status": "sent", 
      "send_time": "2016-01-01T14:42:58+00:00" 
     }, 
     { 
      "id": 4, 
      "type": "regular", 
      "status": "sent", 
      "send_time": "2016-06-12T14:42:58+00:00" 
     } 
    ] 
} 

그래서 위의 배열에서 마지막 개체가 나는이 평가 한 다음 해당 개체를 잡아 얼마나, 가장 최근의 send_time있다

? 나는 세미 솔루션을 가지고 있지만, 오랜 바람을 피우고있는 것처럼 보인다.

<?php 
    //Build an array of send_times 
    $dates = []; 
    foreach($result['campaigns'] as $campaign) { 
     $dates[$campaign['id']] = $campaign['send_time']; 
    } 

    //Get the most recent date 
    $mostRecent = 0; 
    foreach($dates as $k => $v) { 
     $curDate = strtotime($v); 
     if($curDate > $mostRecent) { 
      $mostRecent = $curDate 
      $currentId = $k; 
     } 
    } 

    //Get the object 
    foreach($results['campaigns'] as $campaign) { 
     if($campaign['id'] == $currentId) { 
      $c = $campaign; 
     } 
    } 
?> 
+0

이 무엇을 당신이하는 것은 비록 확실히 명확한 해결책은'date_send'에 의해'usort'로 객체를 정렬 한 다음 첫 번째 요소 폼을 정렬 된 결과로 가져올 수 있습니다. –

+2

@Anant * "대답을 너무 높게 표하십시오. 감사합니다."* - 그 사람 (또는 그 문제에 대해 다른 누구라도)이 답변을 받았다면, 응답이 받아 들여지는 것 외에 추가 upvote를받을 자격이 있다고 생각하면, 그것은 그들의 결정입니다. 그것은 "포인트를 차기"입니다. 당신은 "저"배고픔에 배고픈가? –

+0

@ Fred-ii- 그는 내 대답을 표시 했으므로 나는 그가 너무 높게 투표 할 수 있다고 지적하고 있습니다. 나는 영어를 향상시켜야한다고 생각합니다. 죄송합니다. –

답변

2

사용 array_multisort() (한 줄의 코드) : -

<?php  
$data = '{ 
    "campaigns": [ 
     { 
      "id": 1, 
      "type": "regular", 
      "status": "save", 
      "send_time": "" 
     }, 
     { 
      "id": 2, 
      "type": "regular", 
      "status": "sent", 
      "send_time": "2015-11-11T14:42:58+00:00" 
     }, 
     { 
      "id": 3, 
      "type": "regular", 
      "status": "sent", 
      "send_time": "2016-01-01T14:42:58+00:00" 
     }, 
     { 
      "id": 4, 
      "type": "regular", 
      "status": "sent", 
      "send_time": "2016-06-12T14:42:58+00:00" 
     } 
    ] 
}'; 
$array = json_decode($data,true)['campaigns']; // decode json string to array 
array_multisort($array,SORT_DESC, SORT_STRING); // use of array_multisort 
echo "<pre/>";print_r($array); // this will returns you indexed array like 0,1,2... you can again convert it to campaigns array like $final_array['campaigns'] = $array; 
?> 

출력 : - https://eval.in/598349

참고 : -

1.당신의 주어진 데이터가 json_decode()를 사용할 필요가 다음 이미 배열에없는 경우, 직접 더 참조 할 수

https://eval.in/598355

array_multisort()를 사용 : -

http://sg2.php.net/manual/en/function.array-multisort.php

0

당신은 (당신이 당신의 자신의 정렬을 정의 할 수 있도록 내가 usort을 건의 할 것입니다) 해당 속성하여 개체를 정렬 할 수 있으며 그 배열의 첫 번째 항목을 얻을.

usort($result, function ($campaign1, $campaign2) { 
    if ($campaign1['send_time'] == $campaign2['send_time']) { 
     return 0; 
    } 

    return (strtotime($campaign1['send_time']) > strtotime($campaign2['send_time'])) ? -1 : 1; 
}); 

$mostRecentCampaign = $campaign[0]; 

: 당신이 잘못된 순서로 정렬 않다면 비교 기능에 return을 조정할해야 할 수도 있습니다, 그래서 나는이를 실행하지 않았습니다.

2
<?php 
    $dates = []; 
    $recent_campaign = null; 
    $recent_time = 0; 
    foreach($result['campaigns'] as $campaign) { 
     $curDate = strtotime($campaign['send_time']); 
     if($curDate > $recent_time) { 
      $recent_time = $curDate 
      $recent_campaign = $campaign; 
     } 
    } 
    //$recent_campaign is the most recent campaign 
?> 

이 접근법을 시도 할 수 있습니다. 다른 경우 usortsend_time (직접 해결)으로 사용할 수 있습니다.

이 코드를 실행하지 않았습니다! 당신은 단지 최대 요소를 잡고 싶은 적은 코드를 사용하려면

0

,이 시도 :

  1. 잡아에게 최대 시간을 획기적인 시간에 "시간을 보내"열을 매핑하고 얻어서

    ,536 : 최대 값
  2. 는 최대 시간
  3. 이익

예에 해당하는 항목에 의해 배열 필터

$dataArray = /* your array */ 
$maxTime = max(array_map('strtotime',array_column($dataArray["campaigns"], 'send_time'))); 
$maxEntry = array_filter($dataArray["campaigns"], function ($arr) use ($maxTime) { return strtotime($arr["send_time"])==$maxTime; }); 
print_r($maxEntry); 

인쇄겠습니까 :

Array 
(
    [3] => Array 
     (
      [id] => 4 
      [type] => regular 
      [status] => sent 
      [send_time] => 2016-06-12T14:42:58+00:00 
     ) 

) 

을 이것의 장점은 정렬이 필요하지 않습니다. 단점은 정렬을 한 다음 마지막 요소를 가져 오는 것이 더 빠를 것입니다. 그러나 정렬을하면 때로는 원래의 배열 순서를 잃어 버리게됩니다. 다음과 같은

관련 문제