2017-02-10 1 views
1

나는이다차원 배열에서 가장 높은 날짜 시간 값을 갖는 배열 요소를 가져옵니다

Array 
(
    [4621162015] => Array 
     (
      [0] => Array 
       (
        [itemId] => 220929621668 
        [itemName] => Teak Protector - 1ltr water-based teak wood protector - maintain honey colour! 
        [itemPrice] => 24.99 
        [itemCurrencySign] => £ 
        [itemGalleryUrl] => http://i.ebayimg.com/00/s/NjU1WDgwMA==/z/qI8AAOSwt7pXMKHB/$_1.JPG?set_id=880000500F 
        [itemImages] => Array 
         (
          [0] => http://i.ebayimg.com/00/s/NjU1WDgwMA==/z/qI8AAOSwt7pXMKHB/$_1.JPG?set_id=880000500F 
          [1] => http://i.ebayimg.com/00/s/MTEzMVgxNjAw/z/70cAAOSwcL5XMKC6/$_1.JPG?set_id=880000500F 
         ) 

        [itemQuantity] => 257 
        [itemStartTime] => 2012-01-10T16:40:03.000Z 
        [itemEndTime] => 2017-02-12T16:40:03.000Z 
        [itemUrl] => http://www.ebay.com/itm/Teak-Protector-1ltr-water-based-teak-wood-protector-maintain-honey-colour-/220929621668 
        [itemCategoryId] => 4621162015 
        [itemCategoryUrl] => http://stores.ebay.co.uk/JATI-Teak-and-Woven-Furniture/_i.html?_fsub=4621162015 
       ) 

      [1] => Array 
       (
        [itemId] => 220929626118 
        [itemName] => Teak Patinizer - 1ltr patinizer to maintain the silver-patina or weathered look! 
        [itemPrice] => 24.99 
        [itemCurrencySign] => £ 
        [itemGalleryUrl] => http://i.ebayimg.com/00/s/NjU1WDgwMA==/z/1bwAAOSwYmZXMKE-/$_1.JPG?set_id=880000500F 
        [itemImages] => Array 
         (
          [0] => http://i.ebayimg.com/00/s/NjU1WDgwMA==/z/1bwAAOSwYmZXMKE-/$_1.JPG?set_id=880000500F 
          [1] => http://i.ebayimg.com/00/s/MTEzMVgxNjAw/z/A~4AAOSwubRXMKE8/$_1.JPG?set_id=880000500F 
         ) 

        [itemQuantity] => 202 
        [itemStartTime] => 2012-01-10T16:49:41.000Z 
        [itemEndTime] => 2017-02-12T16:49:41.000Z 
        [itemUrl] => http://www.ebay.com/itm/Teak-Patinizer-1ltr-patinizer-maintain-silver-patina-weathered-look-/220929626118 
        [itemCategoryId] => 4621162015 
        [itemCategoryUrl] => http://stores.ebay.co.uk/JATI-Teak-and-Woven-Furniture/_i.html?_fsub=4621162015 
       ) 

      [2] => Array 
       (
        [itemId] => 220929631080 
        [itemName] => Teak Cleaner - 1ltr bring back the original colour of new teak/hardwood! 
        [itemPrice] => 19.5 
        [itemCurrencySign] => £ 
        [itemGalleryUrl] => http://i.ebayimg.com/00/s/NjU1WDgwMA==/z/HWIAAOSw8vZXMKGK/$_1.JPG?set_id=880000500F 
        [itemImages] => Array 
         (
          [0] => http://i.ebayimg.com/00/s/NjU1WDgwMA==/z/HWIAAOSw8vZXMKGK/$_1.JPG?set_id=880000500F 
          [1] => http://i.ebayimg.com/00/s/MTEzMVgxNjAw/z/u8kAAOSw3mpXMKGT/$_1.JPG?set_id=880000500F 
         ) 

        [itemQuantity] => 204 
        [itemStartTime] => 2012-01-10T16:59:50.000Z 
        [itemEndTime] => 2017-02-12T16:59:50.000Z 
        [itemUrl] => http://www.ebay.com/itm/Teak-Cleaner-1ltr-bring-back-original-colour-new-teak-hardwood-/220929631080 
        [itemCategoryId] => 4621162015 
        [itemCategoryUrl] => http://stores.ebay.co.uk/JATI-Teak-and-Woven-Furniture/_i.html?_fsub=4621162015 
       ) 

     ) 

    [8389242015] => Array 
     (
      [0] => Array 
       (
        [itemId] => 222388502715 
        [itemName] => New Folding Round Teak Picnic Table Wood Garden Premium 50cm Foldup Solid Sale 
        [itemPrice] => 33.33 
        [itemCurrencySign] => £ 
        [itemGalleryUrl] => http://i.ebayimg.com/00/s/NjU1WDgwMA==/z/bWcAAOSw4DJYiIOA/$_57.JPG?set_id=8800005007 
        [itemImages] => Array 
         (
          [0] => http://i.ebayimg.com/00/s/NjU1WDgwMA==/z/bWcAAOSw4DJYiIOA/$_57.JPG?set_id=8800005007 
          [1] => http://i.ebayimg.com/00/s/OTg1WDEwMDA=/z/kAoAAOSwo4pYiIOH/$_57.JPG?set_id=8800005007 
         ) 

        [itemQuantity] => 50 
        [itemStartTime] => 2017-01-25T12:00:13.000Z 
        [itemEndTime] => 2017-02-24T12:00:13.000Z 
        [itemUrl] => http://www.ebay.com/itm/New-Folding-Round-Teak-Picnic-Table-Wood-Garden-Premium-50cm-Foldup-Solid-Sale-/222388502715 
        [itemCategoryId] => 8389242015 
        [itemCategoryUrl] => http://stores.ebay.co.uk/JATI-Teak-and-Woven-Furniture/_i.html?_fsub=8389242015 
       ) 

     ) 
)  

같은 배열과 내가 그래서 최종 다차원 배열 내부에 존재하는 모든 항목에 걸쳐 itemStartTime에 따라 최근 두 항목을 얻고 싶은이 배열은 내가 완전히이 하나가 다음 다른 단서를 받고 각 밖으로 정렬 분석 및 foreach 문을 사용하지만 더 큰 배열

,691을위한 너무 느린 것 여부에 분실하고 TBH
Array 
(
    [0] => Array 
     (
      [itemId] => 222388502715 
      [itemName] => New Folding Round Teak Picnic Table Wood Garden Premium 50cm Foldup Solid Sale 
      [itemPrice] => 33.33 
      [itemCurrencySign] => £ 
      [itemGalleryUrl] => http://i.ebayimg.com/00/s/NjU1WDgwMA==/z/bWcAAOSw4DJYiIOA/$_57.JPG?set_id=8800005007 
      [itemImages] => Array 
       (
        [0] => http://i.ebayimg.com/00/s/NjU1WDgwMA==/z/bWcAAOSw4DJYiIOA/$_57.JPG?set_id=8800005007 
        [1] => http://i.ebayimg.com/00/s/OTg1WDEwMDA=/z/kAoAAOSwo4pYiIOH/$_57.JPG?set_id=8800005007 
       ) 

      [itemQuantity] => 50 
      [itemStartTime] => 2017-01-25T12:00:13.000Z 
      [itemEndTime] => 2017-02-24T12:00:13.000Z 
      [itemUrl] => http://www.ebay.com/itm/New-Folding-Round-Teak-Picnic-Table-Wood-Garden-Premium-50cm-Foldup-Solid-Sale-/222388502715 
      [itemCategoryId] => 8389242015 
      [itemCategoryUrl] => http://stores.ebay.co.uk/JATI-Teak-and-Woven-Furniture/_i.html?_fsub=8389242015 
     ) 

     [1] => Array 
       (
        [itemId] => 220929631080 
        [itemName] => Teak Cleaner - 1ltr bring back the original colour of new teak/hardwood! 
        [itemPrice] => 19.5 
        [itemCurrencySign] => £ 
        [itemGalleryUrl] => http://i.ebayimg.com/00/s/NjU1WDgwMA==/z/HWIAAOSw8vZXMKGK/$_1.JPG?set_id=880000500F 
        [itemImages] => Array 
         (
          [0] => http://i.ebayimg.com/00/s/NjU1WDgwMA==/z/HWIAAOSw8vZXMKGK/$_1.JPG?set_id=880000500F 
          [1] => http://i.ebayimg.com/00/s/MTEzMVgxNjAw/z/u8kAAOSw3mpXMKGT/$_1.JPG?set_id=880000500F 
         ) 

        [itemQuantity] => 204 
        [itemStartTime] => 2012-01-10T16:59:50.000Z 
        [itemEndTime] => 2017-02-12T16:59:50.000Z 
        [itemUrl] => http://www.ebay.com/itm/Teak-Cleaner-1ltr-bring-back-original-colour-new-teak-hardwood-/220929631080 
        [itemCategoryId] => 4621162015 
        [itemCategoryUrl] => http://stores.ebay.co.uk/JATI-Teak-and-Woven-Furniture/_i.html?_fsub=4621162015 
       ) 



) 

아래처럼 보일 것이다

이것에 대한 도움이 정말 굉장합니다!

내 솔루션은 그냥 나에게 머리를 제공 한 다음 지금이 각 배열을 재 배열 그냥 항목을 누른 상태에서 더 나은이

foreach ($storeItemsArray as $key => $value) 
       foreach ($value as $key_sub => $value_sub) 
        $itemsArray[]=$value_sub; 



      // sort items and get the latest first 
      usort($itemsArray, function($a, $b) { 
         $ad = new DateTime($b['itemStartTime']); 
         $bd = new DateTime($a['itemStartTime']); 

         if ($ad == $bd) { 
         return 0; 
         } 

        return $ad < $bd ? -1 : 1; 
      }); 

뭔가처럼 그들을 분류하는 새로운 배열을 준비까지 내가 단지 걱정이 배열을 400 또는 500 항목을 들고 느려질 것입니다 : (

답변

1

기술적으로는 foreach()을 사용하지 않으며 아마도 사용할 수 있습니다. 내가 한 모든 것은 1 차원을 제거하여 call_user_func_array()array_merge()으로 쉽게 정렬 할 수 있도록하는 것입니다.

$newArr = call_user_func_array('array_merge', $arr); //To remove 1st Dimension 

usort($newArr, function($x, $y){ 

    $x = strtotime($x['itemStartTime']); 
    $y = strtotime($y['itemStartTime']); 

    if($x>$y){ 

     return 0; 
    } 

    return 1; 
}); 

var_dump(array_slice($newArr, 2)); 

는 출력 :

array(2) { 
    [0] => array(3) { 
     ["itemId"] => int(220929626118)["itemName"] => string(80) 
     "Teak Patinizer - 1ltr patinizer to maintain the silver-patina or weathered look!" ["itemStartTime"] => string(24) 
     "2012-01-10T16:49:41.000Z" 
    }[1] => array(3) { 
     ["itemId"] => int(220929621668)["itemName"] => string(78) 
     "Teak Protector - 1ltr water-based teak wood protector - maintain honey colour!" ["itemStartTime"] => string(24) 
     "2012-01-10T16:40:03.000Z" 
    } 
} 
+0

그게 전부가 내가 너를 확인하고 다시 보자. –

0

당신은 foreach가 너무 큰 배열에 대해서는 느릴 거라는 것을 알고 있습니다. 그러나 당신이 정말로 엄청난 양의 데이터를 다루지 않는다면 이것은 제가 취할 수있는 길입니다 이것은 주로 배열의 구조에 달려 있습니다.

먼저 배열을 모두 하나의 배열로 병합 한 다음 정렬을 수행하고 정렬 된 배열에서 상위 2 개의 항목을 꺼냅니다.

(데이터를 기준으로)이 항목들이 초기에 카테고리로 그룹화되어 있다고 가정합니다.

// $categoryItems = array(...) // This is your original array. 
$items = array() // An empty array for our items 

// Combine all items into one array. 
foreach($categoryItems as $category) { 
    foreach($category as $item) { 
     $items[] = $item; 
    } 
} 

// Sort items using a custom sort function 
$sortedItems = usort($items, "sortItems"); 

// This variable will contain your 2 items 
$latestItems = array_slice($sortedItems, 0, 2); 

function sortItems($a, $b) { 
    if ($a['itemStartTime'] == $b['itemStartTime']) { 
     return 0; 
    } 
    return ($a['itemStartTime'] < $b['itemStartTime']) ? -1 : 1; 
} 

이 안된 코드 - 그것은 몇 가지 작은 개조하면 되겠

+0

네는 내가 같은 생각하지만 난 그것을 코드의 내 버전에 대한 내 편집과 같은 최후의 수단을 볼 유지뿐만 아니라 당신의 같은 논리 :) –

0

을 요구할 수있다, 그래서 나는 이것이 당신이 찾고 될 수있는 코드입니다 가정합니다. 내가 찾는 더 높은 날짜를 추출하는 데 도움이되는 사용자 정의 함수를 작성했습니다. 함수의 두 번째 매개 변수에서 원하는 더 높은 날짜의 길이를 지정할 수 있습니다. 당신이 설명을 원한다면, 내가 그 의견에 알려주십시오.

<?php 

    function extract_top_dates($arr, $out_arr_len) { 
     $dates = array(); 
     foreach($arr as $key1 => $value1) { 
      foreach($value1 as $key2 => $value2) { 
       $dates[$value2['itemId']] = strtotime($value2['itemStartTime']); 
      } 
     } 

     arsort($dates); 
     $top_dates = array_slice($dates, 0, $out_arr_len, true); 
     $arr_new = array(); 

     foreach($arr as $key1 => $value1) { 
      foreach($value1 as $key2 => $value2) { 
       if(in_array($value2['itemId'], array_keys($top_dates))) { 
        $arr_new[] = $value2; 
       } 
      } 
     } 

     rsort($arr_new); 

     return $arr_new; 
    } 

    var_dump(extract_top_dates($arr, 2)); 

?> 

희망 하시겠습니까?

관련 문제