J'ai une base de données MySql basée sur un tableau. Voici le tableau.

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

Comment puis-je obtenir l'élément lokasi_terakhir qui est groupé par le premier caractère? Quelle est la meilleure façon?

Tel est le but:

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

S'il vous plaît donnez votre avis

-4
Fadly Dzil 27 nov. 2017 à 15:09

3 réponses

Meilleure réponse

Voici deux méthodes raffinées. Celui que vous choisirez dépendra de vos préférences personnelles (vous ne trouverez pas de meilleures méthodes).

Dans le premier, je suis en train d'itérer le tableau, déclarant le premier caractère de la valeur lokasi_terakhir comme clé dans la déclaration $result. Si la clé n'existe pas encore dans le tableau de sortie, elle doit être déclarée / définie sur 1. Après avoir été instancié, il peut alors être incrémenté - j'utilise la "pré-incrémentation".

La deuxième méthode mappe d'abord un nouveau tableau en utilisant le premier caractère de la valeur lokasi_terakhir de chaque sous-tableau, puis compte chaque occurrence de chaque lettre.

(Lien de démonstration)

Méthode n ° 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);

Méthode n ° 2: (fonctionnelle)

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

Sortie: (de l'un ou l'autre)

array (
  'Y' => 1,
  'P' => 2,
)
1
mickmackusa 27 nov. 2017 à 13:13
<?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)));

Ce code récupère la première lettre des champs lokasi_terakhir, récupère les valeurs uniques pour éviter les doublons et retourne simplement le tableau pour obtenir le résultat souhaité.

La sortie est la suivante:

Array ( [Y] => 0 [P] => 1 )
0
pr1nc3 27 nov. 2017 à 12:29

Vous pouvez regrouper ces éléments comme ceci:

    $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;
}
1
Fabian Bettag 27 nov. 2017 à 12:19
47510689