287 votes

Convertir les valeurs d'un tableau de chaînes de caractères en int ?

Le code suivant :

$string = "1,2,3"
$ids = explode(',', $string);
var_dump($ids);

Retourne le tableau :

array(3) {
  [0]=>
  string(1) "1"
  [1]=>
  string(1) "2"
  [2]=>
  string(1) "3"
}

J'ai besoin que les valeurs soient de type int au lieu du type string . Y a-t-il une meilleure façon de procéder que de parcourir le tableau en boucle avec la fonction foreach et en convertissant chaque string a int ?

1 votes

Pour les chercheurs qui recherchent une solution adaptée aux données multidimensionnelles, veuillez consulter cette question similaire : stackoverflow.com/questions/27147105/

0voto

Nazariy Points 3046

Je suis surpris que personne n'ait proposé filter_var Je ne suis pas sûr de ses performances sur les grands ensembles de données, mais si vous privilégiez la validité aux performances, voici un exemple :

$sampleString = '1,2 3, 4, 6, 5 , a';
$filteredValues = filter_var(
     explode(',', $sampleString),
     FILTER_VALIDATE_INT,
     FILTER_NULL_ON_FAILURE | FILTER_FORCE_ARRAY
);

array (size=6)
  0 => int 1
  1 => null
  2 => int 4
  3 => int 6
  4 => int 5
  5 => null

Comme vous pouvez le constater 2 3 n'est pas un nombre valide, de même que a et ont été remplacés par null

Pour se débarrasser des valeurs vides, vous pouvez appliquer array_filter

$filteredValues = array_filter($filteredValues);

ce qui donnerait le résultat suivant :

array (size=4)
  0 => int 1
  2 => int 4
  3 => int 6
  4 => int 5

-2voto

mickmackusa Points 18931

Une autre technique consiste à donner des indications de type (coerce) sur les valeurs entrantes à int après l'éclatement de la chaîne.

Notez que ces techniques fonctionneront comme démontré dans mon lien de démonstration, à moins que vous n'ayez configurer php pour utiliser la saisie stricte .

Les techniques suivantes ne doivent pas être utilisées pour assainir les chaînes de caractères non numériques ; elles supposent que toutes les valeurs seront numériques.

Si des valeurs flottantes sont passées dans ces techniques, elles seront tronquées/flouées en nombres entiers.

Code : ( Démo )

$string = "1,2,3";
$array = explode(',', $string);
var_dump($array);

echo "\n---\n";
array_walk($array, function(int &$int){;});
var_dump($array);

echo "\n---\n";
var_dump(
    array_map(function(int $i){ return $i; }, explode(',', $string))
);

echo "\n---\n";
var_dump(
    array_map(fn(int $i) => $i, explode(',', $string)) // PHP 7.4 arrow function syntax
);

Sortie :

array(3) {
  [0]=> string(1) "1"
  [1]=> string(1) "2"
  [2]=> string(1) "3"
}

---
array(3) {
  [0]=> int(1)
  [1]=> int(2)
  [2]=> int(3)
}

---
array(3) {
  [0]=> int(1)
  [1]=> int(2)
  [2]=> int(3)
}

---
array(3) {
  [0]=> int(1)
  [1]=> int(2)
  [2]=> int(3)
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X