简体   繁体   中英

2 arrays count how many times id = date

Ive sat with this for a while now, and its getting late. Im trying to get a top 3 of most sales from last month, and i need to count how many times a id from array 1 is equal to array 2 last month(6 = last atm.) like id 4 = 2, id 7 = 3

It might not be the perfect solution, but im just trying to break it down by my self, so later on 'maybe' problems, will i take care of when i hit the wall, so please, if anyone can help me here, ill be greatfull.

UPDATE - I will add the result im looking for here: (sorry i didnt before, it makes it alot easier :-) - The result below, is because i want the count from 2014-06-01 and up to the last day of that month monly, on array[0][1] under this array, only 6-7-8 is not from 2014-06

Hope it makes a bit more sense now ^^

Array
(
[0] => Array
    (
        [0] => Array
            (
                [4] => 2
                [7] => 3
                [1] => 2
                [3] => 2
                [9] => 1
                [12] => 1
                [2] => 1
                [13] => 1
            )

    )

)




Array
(
[0] => Array
    (
        [0] => Array
            (
                [0] => 4
                [1] => 4
                [2] => 7
                [3] => 1
                [4] => 7
                [5] => 7
                [6] => 3
                [7] => 3
                [8] => 4
                [9] => 9
                [10] => 12
                [11] => 2
                [12] => 13
                [13] => 1
            )

        [1] => Array
            (
                [0] => 2014-06-18
                [1] => 2014-06-10
                [2] => 2014-06-05
                [3] => 2014-06-05
                [4] => 2014-06-12
                [5] => 2014-06-11
                [6] => 2013-12-12
                [7] => 2014-07-23
                [8] => 2014-05-13
                [9] => 2014-06-01
                [10] => 2014-06-12
                [11] => 2014-06-04
                [12] => 2014-06-04
                [13] => 2014-06-11
            )

    )

)

I hope that what I understood is what you're really asking for. let's say your array definition is :

$arr = Array
(
0 => Array
    (
        0 => Array
            (
                0 => 4,
                1 => 4,
                2 => 7,
                3 => 1,
                4 => 7,
                5 => 7,
                6 => 3,
                7 => 3,
                8 => 4,
                9 => 9,
                10 => 12,
                11 => 2,
                12 => 13,
                13 => 1
            ),

        1 => Array
            (
                0 => "2014-06-18",
                1 => "2014-06-10",
                2 => "2014-06-05",
                3 => "2014-06-05",
                4 => "2014-06-12",
                5 => "2014-06-11",
                6 => "2013-12-12",
                7 => "2014-07-23",
                8 => "2014-05-13",
                9 => "2014-06-01",
                10 => "2014-06-12",
                11 => "2014-06-04",
                12 => "2014-06-04",
                13 => "2014-06-11"
            )

    )

);

If you need to test if the date is lower than 6 month and then put their id , sales and date you need to use this code

   $result = [];
   $index=0;
   foreach ($arr[0][0] as $key => $value) 
   {
      $date1 = new DateTime($arr[0][1][$key]);
      $date2 = new DateTime();
      $diff = $date1->diff($date2);
      $diff = ($diff->format('%y') * 12) + $diff->format('%m');
      if($diff<=6)
      {
         $result[$index]['id'] = $key;
         $result[$index]['sales'] = $value;
         $result[$index]['date'] = $arr[0][1][$key];
         $index++;
      }
   }

   var_dump($result);

array_count_values() will give you the number of times each value appears in array 1.

$count = array_count_values($array[0][0]);

Result:

Array
(
    [4] => 3
    [7] => 3
    [1] => 2
    [3] => 2
    [9] => 1
    [12] => 1
    [2] => 1
    [13] => 1
)

Then you can use a loop to combine with array 2:

$result = array();
foreach($count as $key=>$val) {
    $result[$array[0][1][$key]] = $val;
}

Result:

Array
(
    [2014-06-12] => 3
    [2014-07-23] => 3
    [2014-06-10] => 2
    [2014-06-05] => 1
    [2014-06-01] => 1
    [2014-06-04] => 1
    [2014-06-11] => 1
)

See demo

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM