分组元素数组基于php的第一个字符值

I have an array based MySql database. This is the array.

[
  0 => [
    'id' => '1997'
    'lokasi_terakhir' => 'YA4121'
  ]
  1 => [
    'id' => '1998'
    'lokasi_terakhir' => 'PL2115'
  ]
  2 => [
    'id' => '1999'
    'lokasi_terakhir' => 'PL4111'
  ]
]

How can I get the element lokasi_terakhir that grouped by the first character ? What the best way ?

This is the goal :

[
   "Y" => 1,
   "P" => 2
]

Please advise

Here are two refined methods. Which one you choose will come down to your personal preference (you won't find better methods).

In the first, I am iterating the array, declaring the first character of the lokasi_terakhir value as the key in the $result declaration. If the key doesn't yet exist in the output array then it must be declared / set to 1. After it has been instantiated, it can then be incremented -- I am using "pre-incrementation".

The second method first maps a new array using the first character of the lokasi_terakhir value from each subarray, then counts each occurrence of each letter.

(Demonstrations Link)

Method #1: (foreach)

foreach($array as $item){
    if(!isset($result[$item['lokasi_terakhir'][0]])){
        $result[$item['lokasi_terakhir'][0]]=1;  // instantiate
    }else{
        ++$result[$item['lokasi_terakhir'][0]];  // increment
    }
}
var_export($result);

Method #2: (functional)

var_export(array_count_values(array_map(function($a){return $a['lokasi_terakhir'][0];},$array)));
// generate array of single-character elements, then count occurrences

Output: (from either)

array (
  'Y' => 1,
  'P' => 2,
)

You can group those items like this:

    $array = [
      0 => [
        'id' => '1997',
        'lokasi_terakhir' => 'YA4121'
      ],
      1 => [
        'id' => '1998',
        'lokasi_terakhir' => 'PL2115'
      ],
      2 => [
        'id' => '1999',
        'lokasi_terakhir' => 'PL4111'
      ]
    ];

$result = array();
foreach($array as $item) {
  $char = substr($item['lokasi_terakhir'], 0, 1);
  if(!isset($result[$char])) {
    $result[$char] = array();
  }

  $result[$char][] = $item;
}
<?php
$array=[
    0 => [
        'id' => '1997',
    'lokasi_terakhir' => 'YA4121'
  ],
  1 => [
    'id' => '1998',
    'lokasi_terakhir' => 'PL2115'
  ],
  2 => [
    'id' => '1999',
    'lokasi_terakhir' => 'PL4111'
  ]
];

foreach($array as $row){
    $newArray[]=$row['lokasi_terakhir'][0];

}

print_r(array_flip(array_unique($newArray)));

this code gets the first letter of the fields lokasi_terakhir , get the unique values to avoid duplicates and just flips the array to get the outcome you want.

The output is this :

Array ( [Y] => 0 [P] => 1 )