[php] 配列の値を文字列からintに変換する方法は?



4 Answers

これは、 array_map()array_map()array_map()よりほぼ3倍高速です。

$integerIDs = json_decode('[' . $string . ']', true);
Question
$string = "1,2,3"
$ids = explode(',', $string);
var_dump($ids);

返品

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

値が文字列型ではなくint型である必要があります。 foreachを使って配列をループし、各文字列をintに変換するよりも、これを行うより良い方法はありますか?




次のような配列がある場合:

$runners = ["1","2","3","4"];

そして、整数に変換して配列内に保持したい場合は、次のようにしてください。

$newArray = array_map( create_function('$value', 'return (int)$value;'),
            $runners);



単純にする...

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

なぜ他の方法をお探しですか? ループは痛みなく仕事をします。 パフォーマンスが懸念される場合は、 json_decode ()json_decode ()できます。 人々はそれを使用する方法を投稿しているので、私はここにそれを含めません。

注意: ===演算子を===の代わりに使用すると、文字列の値が引用符なしで有効な数値を形成する場合、文字列の値は自動的に数値(たとえば、整数または倍精度)に変換されます。 例えば:

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

したがって、==はあなたの問題を解決し、効率的ですが、比較で===を使用すると壊れます。




PHP 5.3導入された)クロージャでこのコードを使用してください。これは受け入れられた答えよりも少し速く、私にとっては整数にキャストしようとする意図がはっきりしています:

// if you have your values in the format '1,2,3,4', use this before:
// $stringArray = explode(',', '1,2,3,4');

$stringArray = ['1', '2', '3', '4'];

$intArray = array_map(
    function($value) { return (int)$value; },
    $stringArray
);

var_dump($intArray);

出力は次のようになります。

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



マルチディメンショナルアレイを使用している場合は、前述の解決策のどれも動作しません。 ここに私のソリューションです:

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

次に、これを実行します:

arrayValuesToInt($multiDimentionalArray);

これは次のような配列になります:

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

このように見える:

[[1,2][3,4]

(これはどんな深さでも機能します)






Related