Say I have a string like so $thestring = "1,2,3,8,2"
.
If I explode(',', $thestring)
it, I get an array of strings. How do I explode it to an array of integers instead?
次のようなものを使用します。
$data = explode( ',', $thestring );
array_walk( $data, 'intval' );
ほとんどの場合、実際に行う必要はありません (PHP は通常、文字列と浮動小数点数/整数のキャストの処理に適しています) が、絶対に必要な場合はarray_walk
、intval
orを使用できfloatval
ます。
$arr = explode(',','1,2,3');
// use floatval if you think you are going to have decimals
array_walk($arr,'intval');
print_r($arr);
Array
(
[0] => 1
[1] => 2
[2] => 3
)
もう少し詳細な情報が必要な場合は、以下を調べることもできますsettype
。
$arr = explode(",","1,2,3");
function fn(&$a){settype($a,"int");}
array_walk($f,"fn");
print_r($f);
Array
(
[0] => 1
[1] => 2
[2] => 3
)
これは、動的にキャストしようとしている場合に特に役立ちます。
class Converter {
public $type = 'int';
public function cast(&$val){ settype($val, $this->type); }
}
$c = new Converter();
$arr = explode(",","1,2,3,0");
array_walk($arr,array($c, 'cast'));
print_r($arr);
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 0
)
// now using a bool
$c->type = 'bool';
$arr = explode(",","1,2,3,0");
array_walk($arr,array($c, 'cast'));
var_dump($arr); // using var_dump because the output is clearer.
array(4) {
[0]=>
bool(true)
[1]=>
bool(true)
[2]=>
bool(true)
[3]=>
bool(false)
}
$arr=explode(',', $thestring);
$newstr = '';
foreach($arr as $key=>$val){
$newstr .= $val;
}
$thestring は文字列なので、文字列の配列を取得します。
展開された値の前に (int) を追加するだけです。
または、array_walk 関数を使用します。
$arr = explode(',', $thestring);
array_walk($arr, 'intval');
$thestring = "1,2,3,8,a,b,2";
$newArray = array();
$theArray = explode(",", $thestring);
print_r($theArray);
foreach ($theArray as $theData) {
if (is_numeric($theData)) {
$newArray[] = $theData;
}
}
print_r($newArray);
// 出力
元の配列
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 8 [4] => a [5] => b [6] => 2 )
数値のみの配列
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 8 [4] => 2 )