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

Nik*_*ose 3 php arrays

我跟着这个这个问题中的线索.

我试图将输入的数字流转换为整数数组.代码应该是自我解释的.

$handle = fopen("php://stdin","r");

print("Enter space separated numbers to be made to an array\n");

$numStream = fgets($handle);

print("Creating array from : {$numStream}\n");

//Using explode to create arrays
//now we have an array of Strings
$numArray = explode(" ", $numStream);

var_dump($numArray);

print(getType($numArray[0]));
print("\n");
array_walk($numArray, 'intval');
print(getType($numArray[1]));
print("\n");
var_dump($numArray);
print_r($numArray);
Run Code Online (Sandbox Code Playgroud)

我试图转换String数组,

array_walk($numArray, 'intval')
Run Code Online (Sandbox Code Playgroud)

最后两个打印块在转换之前和之后打印数组元素的类型.

两种情况下的输出都是字符串

string
string
Run Code Online (Sandbox Code Playgroud)

我想知道这里发生了什么?可能..

  1. 转换是错误的
  2. 如何检查类型是错误的

或者两者都可能.

添加完整的输入和输出,

$ php arrays/arrayStringToInteger.php 
Enter space separated numbers to be made to an array
1 1
Creating array from : 1 1

Array
(
    [0] => 1
    [1] => 1

)
string
string
/home/ubuntu/workspace/basics/arrays/arrayStringToInteger.php:22:
 array(2) {
   [0] =>
    string(1) "1"
   [1] =>
    string(2) "1
 "
}
 Array
 (
    [0] => 1
    [1] => 1

)
Run Code Online (Sandbox Code Playgroud)

u_m*_*der 16

您应该使用array_map而不是array_walk:

$numArray = array_map('intval', $numArray);
Run Code Online (Sandbox Code Playgroud)

如果您仍想使用array_walk- 请参阅说明的手册:

如果回调需要使用数组的实际值,请将回调的第一个参数指定为引用.然后,对这些元素所做的任何更改都将在原始数组中进行.

由于intval函数不能与引用一起使用,因此需要将其包含在其他逻辑中,例如:

array_walk($numArray, function(&$v){ $v = intval($v); });
// which is the same as @BizzyBob solution)))
Run Code Online (Sandbox Code Playgroud)