Разбивать целые числа, разделенные запятыми, на целые числа? [дубликат]


На этот вопрос уже есть ответ здесь:

Допустим, у меня есть строка, подобная этой $thestring = "1,2,3,8,2".

Если я explode(',', $thestring) это, я получаю массив строк. Как мне вместо этого разбить его на массив целых чисел?

Author: Prof. Falken, 2013-02-28

6 answers

Используйте что-то вроде этого:

$data = explode( ',', $thestring );
array_walk( $data, 'intval' );

Http://php.net/manual/en/function .array-walk.php

 11
Author: Serge Kuharev, 2013-02-28 12:17:42

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)
}

Пример кодовый контроллер.

 19
Author: biziclop, 2013-02-28 12:25:33
$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 ) 
 1
Author: Dino, 2013-02-28 12:14:18
$arr=explode(',', $thestring);
$newstr   = '';
foreach($arr as $key=>$val){
  $newstr .= $val; 
}
 1
Author: 웃웃웃웃웃, 2013-02-28 12:15:05

Так как $thestring является строкой, то вы получите массив строк.

Просто добавьте (int) перед разнесенными значениями.

Или используйте функцию array_walk:

$arr = explode(',', $thestring);
array_walk($arr, 'intval');
 0
Author: Jonast92, 2013-02-28 12:12:46

По большей части вам это действительно не нужно (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)
}
 0
Author: cwallenpoole, 2013-02-28 12:24:21