I get from my DB data in format like this:
array(12) { [0]=> array(4) { ["id"]=> string(1) "1" ["count"]=> string(5) "78984" ["month"]=> string(1) "6" ["hours"]=> string(10) "10580.0833" } [1]=> array(4) { ["id"]=> string(1) "2" ["count"]=> string(5) "64174" ["month"]=> string(1) "6" ["hours"]=> string(9) "6866.8333" } [2]=> array(4) { ["id"]=> string(1) "3" ["count"]=> string(5) "31032" ["month"]=> string(1) "6" ["hours"]=> string(9) "3700.9167" } [3]=> array(4) { ["id"]=> string(1) "1" ["count"]=> string(5) "91114" ["month"]=> string(1) "7" ["hours"]=> string(10) "11859.6000" } ...
Each of array inside has a key: “id”. It mostly look values from 1 to 3. I would like to create a new array based on this “ids” that would look like this:
array("number of unique ids") { [0]=> "for id = 0" array(12) { int() count/hours int() count/hours int() count/hours ... } [1]=> "for id = 1 and so on..." array(12){ .... }
I`ve been trying to do it like this:
$data1 = []; $data2 = []; $data3 = []; foreach($data as $key => $record){ if($record['id'] == 1){ array_push($data1, $record['count']/$record['hours']); }else if($data['id_zmiana'] == 2){ array_push($data2, $record['count']/$record['hours']); }else{ array_push($data3, $record['count']/$record['hours']); } } $raport = array_merge($data1, $data2, $data3);
And that would work, but it doesn`t look good in my opinion, beacuse what if the id change to some big number.
Advertisement
Answer
Yeah, having separate arrays for each ID is not a good idea. How about:
$raport = []; foreach ($data as $record) { $raport[$record['id']][] = $record['count'] / $record['hours']); }
Simple, and straight to the point.
Haven’t tested it. Next time try to use var_export() to export the data you put in your question. That way we can actually use it, without having to rewrite it completely.