Skip to content
Advertisement

Array data manipulations PHP

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.

User contributions licensed under: CC BY-SA
10 People found this is helpful
Advertisement