将字符串转换为整数数组 PHP

8

我想在php中将字符串(例如1,2,3,4,5,6)转换为整数数组。 我发现有些函数只能访问字符串的第一个字符,例如1。 如何将整个字符串转换为数组?

function read_id_txt()
{

        $handle_file = fopen("temporalfile.txt", 'r'); 

        $i=0;

        while ($array_var[$i] = fgets($handle_file, 4096)) { 
            echo "<br>";
            print_r($array_var[i]);
            $i++;
        }

        fclose($handle_file);   

        $temp=explode(" ", $array_var[0]);      

        return $temp;   


}

在文本中我有这些值:1、2、4、56、6、1、23、34、54、75、43。 - snake plissken
5个回答

25
使用PHP的explode函数
$str = "1,2,3,4,5,6";
$arr = explode("," $str); // array( '1', '2', '3', '4', '5', '6' );

foreach ($arr AS $index => $value)
    $arr[$index] = (int)$value; 

// casts each value to integer type -- array( 1, 2, 3, 4, 5, 6 );

正如Tim Cooper所建议的那样,使用array_walk比上面的循环更简单:

array_walk($arr, 'intval');

好的,我所做的是上面的代码: $handle_file = fopen("temporalfile.txt", 'r'); $i=0; while ($array_var[$i] = fgets($handle_file, 4096)) { $i++;} fclose($handle_file); $temp=explode(" ", $array_var[0]); print_r($arr);它返回数组([0] => 1,2,4,56,6,1,23,34,54,75,43) 我想让每个值在矩阵的不同单元格中。 - snake plissken
1
@Josh:那是一个字符串数组,不是整数。 - user142162
2
@Josh:您可以使用简单的 array_walk 调用来简化该循环:$arr = array_walk('intval', $arr); - user142162
由于使用intval,这将返回非数字值。 "" == 0使用intval。 - CommandZ
注意!这在 PHP 5.3+ 中不起作用!请使用 $arr = array_map('intval', $arr); - Ondrej Machulda
显示剩余5条评论

11
return array_map('intval', explode(",", '1,2,3,4,5,6,7,8,9'));

array_walk返回一个bool值。这是我转换字符串为整型数组并在Jpgraph中使用的唯一方法。 - user2001487
array_walk会修改第一个参数,所以在@josh的解决方案中,$arr变量将包含整数数组而不是返回值。 - Roland Soós

4

以上答案可能会返回非数字值

使用intval的array_walk和array_map

两者都返回带有非数字值的数组。

$string = ',g,6,4,3,f,32,a,';
$array = explode(',', $string);
array_walk($array, 'intval');
$arrayMap = array_map('intval', $array);
var_dump($array);
var_dump($arrayMap);
/*
     array(9) {
      [0]=>
      string(0) ""
      [1]=>
      string(1) "g"
      [2]=>
      string(1) "6"
      [3]=>
      string(1) "4"
      [4]=>
      string(1) "3"
      [5]=>
      string(1) "f"
      [6]=>
      string(2) "32"
      [7]=>
      string(1) "a"
      [8]=>
      string(0) ""
    }
 */

使用 array_filter 只返回数字值

$string = ',g,6,4,3,f,32,a,';
$array = explode(',', $string);
$numericOnlyArray = array_filter($array,'is_numeric');

var_dump($numericOnlyArray);

/*
    result:
    array(4) {
      [2]=>
      string(1) "6"
      [3]=>
      string(1) "4"
      [4]=>
      string(1) "3"
      [6]=>
      string(2) "32"
    }
*/

获取整数

$string = ',g,6,4,3,f,32,a,';
$array = explode(',', $string);
$result = array_map('intval', array_filter($array, 'is_numeric'));

var_dump($result);

/*
    result:
    array(4) {
      [2]=>
      int(6)
      [3]=>
      int(4)
      [4]=>
      int(3)
      [6]=>
      int(32)
    }
    }
*/

3

-3

2
虽然这理论上回答了问题,但最好在此处包含答案的基本部分,并提供参考链接。 - TimWolla

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接