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/

3voto

Restez simple...

$intArray = array ();
$strArray = explode(',', $string);
foreach ($strArray as $value)
$intArray [] = intval ($value);

Pourquoi cherchez-vous d'autres moyens ? Le bouclage fait le travail sans douleur. Si la performance est votre préoccupation, vous pouvez opter pour json_decode () . Des personnes ont déjà indiqué comment l'utiliser, c'est pourquoi je ne l'inclus pas ici.

Note : Lorsque vous utilisez l'opérateur == au lieu de === , vos valeurs de chaîne de caractères sont automatiquement converties en nombres (par exemple, entiers ou doubles) si elles forment un nombre valide sans guillemets. Par exemple :

$str = '1';
($str == 1) // true but
($str === 1) //false

Ainsi, == peut résoudre votre problème, est efficace, mais se brisera si vous utilisez === dans les comparaisons.

3voto

Skeets Points 1352

Si vous avez un tableau multidimensionnel, aucune des solutions mentionnées précédemment ne fonctionnera. Voici ma solution :

public function arrayValuesToInt(&$array){
  if(is_array($array)){
    foreach($array as &$arrayPiece){
      arrayValuesToInt($arrayPiece);
    }
  }else{
    $array = intval($array);
  }
}

Alors, fais juste ça :

arrayValuesToInt($multiDimentionalArray);

Cela donnera un tableau comme celui-ci :

[["1","2"]["3","4"]]

ressemble à ça :

[[1,2][3,4]]

Cela fonctionnera avec n'importe quel niveau de profondeur.

Alternativement, vous pouvez utiliser array_walk_recursive() pour une réponse plus courte :

array_walk_recursive($array, function(&$value){
    $value = intval($value);
});

1voto

$arr = ["adfsf", "*&^%$#^", "23", "25", "29"];

function convertArrayStringToArrayInt($arr)
{
    $result = [];
    foreach($arr as $value) {
        if ((int)$value !== 0) {
            $result[] = (int)$value;
        }
    }
    return $result;
}

$result = convertArrayStringToArrayInt($arr);

var_dump($result);

Le résultat sera le suivant

array(3) {
  [0]=> int(23)
  [1]=> int(25)
  [2]=> int(29)
}

0voto

Manoj kumar Points 1

Entrée \=> '["3", "6", "16", "120"]'

Conversion de type que j'ai utilisée \=> (int)$s ;

function Str_Int_Arr($data){
    $h=[];
    $arr=substr($data,1,-1);
    //$exp=str_replace( ",","", $arr);
    $exp=str_replace( "\"","", $arr);
    $s=''; 
    $m=0;
    foreach (str_split($exp) as $k){
        if('0'<= $k && '9'>$k || $k =","){
            if('0' <= $k && '9' > $k){
                $s.=$k;
                $h[$m]=(int)$s;
            }else{
                $s="";
                $m+=1;
            } 
        } 
    } 
    return $h;
}
var_dump(Str_Int_Arr('["3","6","16","120"]'));

Sortie :

array(4) {
  [0]=>
  int(3)
  [1]=>
  int(6)
  [2]=>
  int(16)
  [3]=>
  int(120)
}

Gracias

0voto

Al-Amin Points 508
<?php

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

array_walk( $ids, function ( &$id )
{
    $id = (int) $id;
});
var_dump( $ids );

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