par
Saian » 22 mars 2021, 10:40
En fait un tableau avec plusieurs fois la même clé ça n'existe pas. Que la clé soit numérique ou alphanumérique. C'est comme si t'essayais de mettre plusieurs fois la même clé primaire dans une table sql, c'est pas possible. Si php pète pas une erreur quand il lit le code, au mieux il écrase la valeur par la dernière.
Le tableau il sort de où en fait ? si vraiment t'as besoin de stocker plusieurs valeurs sur un même index, dans ce cas tu peux stocker un tableau de valeurs.
$data = [
1 => [
"une valeur",
"une valeur",
"une valeur",
],
2 => "une valeur",
3 => "une valeur",
4 => "une valeur",
5 => "une valeur",
];
// création du tableau
$keysValues = [
[ 'key' => 1, 'value' => 'une valeur' ],
[ 'key' => 1, 'value' => 'une valeur' ],
[ 'key' => 1, 'value' => 'une valeur' ],
[ 'key' => 2, 'value' => 'une valeur' ],
[ 'key' => 3, 'value' => 'une valeur' ],
[ 'key' => 4, 'value' => 'une valeur' ],
[ 'key' => 5, 'value' => 'une valeur' ],
];
$data = [];
foreach ($keysValues as $keyValue) {
if (!isset($data[$keyValue['key']]))
$data[$keyValue['key']] = $keyValue['value'];
elseif (!is_array($data[$keyValue['key']]))
$data[$keyValue['key']] = [ $data[$keyValue['key']], $keyValue['value'] ];
else
$data[$keyValue['key']][] = $keyValue['value'];
}
Et c'est qu'un exemple, rien ne t'empêche de stocker un tableau de valeurs à chaque index même s'il n'y en a qu'une, ça peut même simplifier les traitements derrière.
$keysValues = [
[ 'key' => 1, 'value' => 'une valeur' ],
[ 'key' => 1, 'value' => 'une valeur' ],
[ 'key' => 1, 'value' => 'une valeur' ],
[ 'key' => 2, 'value' => 'une valeur' ],
[ 'key' => 3, 'value' => 'une valeur' ],
[ 'key' => 4, 'value' => 'une valeur' ],
[ 'key' => 5, 'value' => 'une valeur' ],
];
$data = [];
foreach ($keysValues as $keyValue) {
//if (!isset($data[$keyValue['key']]))
// $data[$keyValue['key']] = [];
$data[$keyValue['key']][] = $keyValue['value'];
}
foreach ($data as $key => $values)
echo "La clé $key possède " . count($values). " valeur(s) : " . implode(',', $values) . "\n";
En fait un tableau avec plusieurs fois la même clé ça n'existe pas. Que la clé soit numérique ou alphanumérique. C'est comme si t'essayais de mettre plusieurs fois la même clé primaire dans une table sql, c'est pas possible. Si php pète pas une erreur quand il lit le code, au mieux il écrase la valeur par la dernière.
Le tableau il sort de où en fait ? si vraiment t'as besoin de stocker plusieurs valeurs sur un même index, dans ce cas tu peux stocker un tableau de valeurs.
[PHP]
$data = [
1 => [
"une valeur",
"une valeur",
"une valeur",
],
2 => "une valeur",
3 => "une valeur",
4 => "une valeur",
5 => "une valeur",
];
// création du tableau
$keysValues = [
[ 'key' => 1, 'value' => 'une valeur' ],
[ 'key' => 1, 'value' => 'une valeur' ],
[ 'key' => 1, 'value' => 'une valeur' ],
[ 'key' => 2, 'value' => 'une valeur' ],
[ 'key' => 3, 'value' => 'une valeur' ],
[ 'key' => 4, 'value' => 'une valeur' ],
[ 'key' => 5, 'value' => 'une valeur' ],
];
$data = [];
foreach ($keysValues as $keyValue) {
if (!isset($data[$keyValue['key']]))
$data[$keyValue['key']] = $keyValue['value'];
elseif (!is_array($data[$keyValue['key']]))
$data[$keyValue['key']] = [ $data[$keyValue['key']], $keyValue['value'] ];
else
$data[$keyValue['key']][] = $keyValue['value'];
}
[/PHP]
Et c'est qu'un exemple, rien ne t'empêche de stocker un tableau de valeurs à chaque index même s'il n'y en a qu'une, ça peut même simplifier les traitements derrière.
[PHP]$keysValues = [
[ 'key' => 1, 'value' => 'une valeur' ],
[ 'key' => 1, 'value' => 'une valeur' ],
[ 'key' => 1, 'value' => 'une valeur' ],
[ 'key' => 2, 'value' => 'une valeur' ],
[ 'key' => 3, 'value' => 'une valeur' ],
[ 'key' => 4, 'value' => 'une valeur' ],
[ 'key' => 5, 'value' => 'une valeur' ],
];
$data = [];
foreach ($keysValues as $keyValue) {
//if (!isset($data[$keyValue['key']]))
// $data[$keyValue['key']] = [];
$data[$keyValue['key']][] = $keyValue['value'];
}
foreach ($data as $key => $values)
echo "La clé $key possède " . count($values). " valeur(s) : " . implode(',', $values) . "\n";
[/PHP]