2016-10-09 8 views
1

나는 array_walk($arr, 'intval'); 내가 다음 코드에서 주석이있는, 무엇을하지 않습니다array_walk()는 무엇을합니까?

<?php  
$handle = fopen ("php://stdin","r"); 
fscanf($handle,"%d",$n); 
$arr_temp = fgets($handle); 
$arr = explode(" ",$arr_temp); 
//array_walk($arr,'intval'); 
$sum=0; 
foreach($arr as $i) 
{ 
    $sum = $sum + $i; 
} 
echo $sum; 
?> 

을 내가 그것을 사용하거나 출력을 변경하지 않는 것하지 않으면. array_walk($arr, 'intval'); 당신은 정수 배열의 모든 값을 변환하는 경우에 그래서는 intval 기능이 무엇 때문에

+0

'재귀 적으로 배열의 각 요소에 대해 함수를 호출 array_walk'. 따라서 기본적으로 inval()은 모든 배열 요소에서 호출되어 해당 요소에서 정수 값을 가져옵니다. 여기에서 확인하십시오 : -http : //php.net/manual/en/function.intval.php 및 http://php.net/manual/en/function.array-walk.php ..이 것을 통해 더 많은 것을 이해할 수 있습니다 : - https://eval.in/657790 –

+0

여러분은 http://php.net/manual/en/function.array-walk.php에서 예제를 읽고'array_walk'을 배울 수 있습니다 –

답변

2

그것의 목적은 해야 변환 $arr의 모든 항목은 정수로한다는 것입니다.

하지만 그렇게하지 않습니다!

intval과 함께 array_walk를 사용하는 것은 부적절합니다. 안전하게 정수의 배열을 탈출하기 위해 다음 코드를 사용하는 것이 좋습니다 인터넷에 많은 사례가

있습니다

<?php 
array_walk($arr, 'intval'); // does nothing in PHP 5.3.3 
?> 

그것은 일부 오래된 PHP 버전 (5.2)에서 작동하지만, 사양에 위배됩니다. intval()은 인수를 수정하지 않고 수정 된 결과를 반환하므로 위의 코드는 배열에 아무런 영향을 미치지 않습니다.

<?php 
$arr = array_map('intval', $arr); 
?> 

을 또는 당신은 array_walk를 사용하여 주장하는 경우 :

대신를 사용할 수 있습니다

<?php 
array_walk($arr, function(&$e) { // note the reference (&) 
    $e = intval($e); 
}); 
?> 
0

PHP's array_walk 기능, 배열의 모든 객체에 지정된 함수를 호출합니다.

+0

'intval() '인자를 변경하지 않으면 array_walk와 함께 사용할 때 배열에 아무런 영향을 미치지 않습니다! –