1

I have this multidimensional array:

array(3) {
     [0]=>
        array(2) {
          ["casestatus"]=> string(4) "Open"
          ["casestatus_count"]=> int(2)
        }
     [1]=>
       array(2) {
          ["casestatus"]=> string(7) "Pending"
          ["casestatus_count"]=> int(1)
        }
     [2]=>
       array(2) {
          ["casestatus"]=> string(4) "Open"
          ["casestatus_count"]=> int(1)
        }
    }

From the array above I am able to merge based on the casestatus key as shown below:

    $newArray = array();

    foreach($mergedData as $data)
    {
        if(!isset($newArray[$data["casestatus"]]))
        {
            $newArray[$data["casestatus"]] = array(
                "casestatus" => $data["casestatus"],
                "casestatus_count" => 0
            );
        }

        $newArray[$data["casestatus"]]["casestatus_count"] += $data["casestatus_count"];
    }

    var_dump($newArray);

From which I get:

array(2) {
    ["Open"]=>
       array(2) {
         ["casestatus"]=> string(4) "Open"
         ["casestatus_count"]=> int(3)
       }
    ["Pending"]=>
       array(2) {
         ["casestatus"]=> string(7) "Pending"
         ["casestatus_count"]=> int(1)
       }
  }

Note how my array keys are my casestatus. So is there a way of not having this and instead have my array keys as:

array(2) {
    [0]=>
       array(2) {
         ["casestatus"]=> string(4) "Open"
         ["casestatus_count"]=> int(3)
       }
    [1]=>
       array(2) {
         ["casestatus"]=> string(7) "Pending"
         ["casestatus_count"]=> int(1)
       }
  }

2 Answers 2

2

Just do array_values($newArray) after the process.

var_dump(array_values($newArray));

array_values()

Sign up to request clarification or add additional context in comments.

Comments

0

You could create a map of status to counts, then sum them:

<?php
$tickets =
[
    [
        'status' => 'Open',
        'count'  => 2
    ],
    [
        'status' => 'Closed',
        'count'  => 1
    ],
    [
        'status' => 'Open',
        'count'  => 1
    ]
];
foreach($tickets as $ticket)
    $status_counts[$ticket['status']][] = $ticket['count'];

foreach($status_counts as $status => $counts)
    $result[] = [
        'status' => $status, 
        'count' => array_sum($counts)
    ];

var_export($result);

Output:

array (
    0 => 
    array (
      'status' => 'Open',
      'count' => 3,
    ),
    1 => 
    array (
      'status' => 'Closed',
      'count' => 1,
    ),
  )

However a simpler format may suffice:

$result = array_map('array_sum', $status_counts);
var_export($result);

Output:

array (
    'Open' => 3,
    'Closed' => 1,
  )

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.