Position actuelle: Accueil> Derniers articles> Que se passe-t-il lorsque la duplication de la clé d'index est répétée lors de l'utilisation de Array_Column?

Que se passe-t-il lorsque la duplication de la clé d'index est répétée lors de l'utilisation de Array_Column?

M66 2025-04-28

Dans PHP, Array_Column () est une fonction très courante qui permet d'extraire des données d'une colonne spécifiée à partir d'un tableau multidimensionnel et de le renvoyer. Cette fonction est particulièrement adaptée au traitement des résultats de la requête de la base de données ou des tableaux similaires aux données structurées. En spécifiant la clé de la colonne, Array_Column () peut facilement extraire toutes les données d'un tableau d'un tableau.

Cependant, de nombreux développeurs peuvent rencontrer un problème: que se passe-t-il si les clés d'index d'un tableau sont répétées lors de l'utilisation de Array_Column () ? Dans cet article, nous explorerons ce problème et fournirons des solutions.

Introduction à array_column ()

L'utilisation de base de la fonction Array_Column () est la suivante:

 array_column(array $input, $column_key, $index_key = null): array
  • $ Entrée : le tableau à deux dimensions d'entrée.

  • $ Column_Key : le nom de clé de la colonne à extraire ou l'index de la colonne.

  • $ index_key : facultatif. Vous pouvez spécifier la clé d'index qui renvoie le tableau.

Cette fonction extrait les données basées sur la clé de colonne donnée $ Column_Key et renvoie un nouveau tableau. Si $ index_key est spécifié, le tableau renvoyé utilisera cette touche comme index.

Par exemple:

 $data = [
    ['id' => 1, 'name' => 'Alice', 'age' => 23],
    ['id' => 2, 'name' => 'Bob', 'age' => 24],
    ['id' => 3, 'name' => 'Charlie', 'age' => 25],
];

$names = array_column($data, 'name'); // ['Alice', 'Bob', 'Charlie']

La situation de duplication des clés d'index

Lorsque le paramètre $ index_key est spécifié, Array_Column () renvoie un nouveau tableau à l'aide de la valeur $ index_key comme index. Si la touche $ index_key dans le tableau d'entrée est répétée, la valeur suivante écrase la valeur précédente. Cette situation confond souvent les développeurs car certaines données peuvent être perdues.

Jetons un coup d'œil à un exemple:

 $data = [
    ['id' => 1, 'name' => 'Alice', 'age' => 23],
    ['id' => 2, 'name' => 'Bob', 'age' => 24],
    ['id' => 1, 'name' => 'Charlie', 'age' => 25],  // id répéter
];

$result = array_column($data, 'name', 'id');

print_r($result);

Sortir:

 Array
(
    [1] => Charlie
    [2] => Bob
)

Dans le code ci-dessus, en raison de la duplication de la touche ID (valeur d'ID est 1), seul "Charlie" est conservé dans le tableau retourné et la valeur "Alice" d'origine est écrasée. C'est ainsi que Array_Column () se comporte lors de la rencontre des index en double.

Comment gérer les clés d'index en double?

Dans certains cas, nous voulons peut-être conserver tous les index en double au lieu de les remplacer. À ce stade, nous pouvons utiliser quelques astuces pour faire face à cette situation:

1. Retraitez l'index en double après avoir utilisé Array_Column ()

Un moyen facile consiste à traiter manuellement l'index en double après que la fonction array_column () renvoie le résultat. Par exemple, nous pouvons utiliser array_merge () pour fusionner les valeurs avec le même index dans un tableau.

 $data = [
    ['id' => 1, 'name' => 'Alice', 'age' => 23],
    ['id' => 2, 'name' => 'Bob', 'age' => 24],
    ['id' => 1, 'name' => 'Charlie', 'age' => 25],  // id répéter
];

$column = array_column($data, 'name', 'id');

// 处理répéter索引,确保所有répéter的值被保留
$column = array_map(function($v) {
    return is_array($v) ? $v : [$v];
}, $column);

print_r($column);

Sortir:

 Array
(
    [1] => Array
        (
            [0] => Alice
            [1] => Charlie
        )

    [2] => Array
        (
            [0] => Bob
        )
)

Dans cet exemple, nous utilisons array_map () pour convertir chaque valeur en un tableau, ce qui garantit que toutes les valeurs sont conservées.

2. Utilisez Array_merge pour fusionner les valeurs en double

Si nous voulons fusionner toutes les valeurs en double dans un tableau, nous pouvons également le faire en faisant une manipulation sur le tableau. Par exemple, le code suivant utilise Array_merge pour fusionner les index en double:

 $data = [
    ['id' => 1, 'name' => 'Alice', 'age' => 23],
    ['id' => 2, 'name' => 'Bob', 'age' => 24],
    ['id' => 1, 'name' => 'Charlie', 'age' => 25],  // id répéter
];

$result = [];
foreach ($data as $item) {
    $result[$item['id']][] = $item['name'];
}

print_r($result);

Sortir:

 Array
(
    [1] => Array
        (
            [0] => Alice
            [1] => Charlie
        )

    [2] => Array
        (
            [0] => Bob
        )
)

De cette façon, nous pouvons contrôler manuellement comment gérer les index en double sans perdre de données.

Résumer

Array_Column () est un outil puissant qui peut nous aider à extraire des données d'une colonne spécifiée à partir d'un tableau. Cependant, lorsqu'il existe des touches d'index en double dans le tableau, les valeurs suivantes écrasent les valeurs précédentes, ce qui peut entraîner une perte de données. Pour gérer cette situation, nous pouvons adopter différentes approches, telles que la fusion des valeurs en double ou l'utilisation d'une fonction de tableau pour traiter davantage le résultat. Selon les besoins spécifiques, le choix de la bonne stratégie pour résoudre le problème des clés d'index en double peut rendre le code plus robuste et fiable.