Разбивать целые числа, разделенные запятыми, на целые числа? [дубликат]
На этот вопрос уже есть ответ здесь:
Допустим, у меня есть строка, подобная этой $thestring = "1,2,3,8,2"
.
Если я explode(',', $thestring)
это, я получаю массив строк. Как мне вместо этого разбить его на массив целых чисел?
6 answers
Используйте что-то вроде этого:
$data = explode( ',', $thestring );
array_walk( $data, 'intval' );
array_map
также может быть использовано:
$s = "1,2,3,8,2";
$ints = array_map('intval', explode(',', $s ));
var_dump( $ints );
Вывод:
array(5) {
[0]=> int(1)
[1]=> int(2)
[2]=> int(3)
[3]=> int(8)
[4]=> int(2)
}
Пример кодовый контроллер.
$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 )
$arr=explode(',', $thestring);
$newstr = '';
foreach($arr as $key=>$val){
$newstr .= $val;
}
Так как $thestring является строкой, то вы получите массив строк.
Просто добавьте (int) перед разнесенными значениями.
Или используйте функцию array_walk:
$arr = explode(',', $thestring);
array_walk($arr, 'intval');
По большей части вам это действительно не нужно (PHP, как правило, хорошо справляется с приведением строк и плавающих/int), но если это абсолютно необходимо, вы можете array_walk
с intval
или 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)
}