所以我有以下数组:
array:3 [
0 => "6.05"
1 => "5.94"
2 => "5.96"
]
哪个是通过以下函数传递的:
$filteredShots = array_filter($shots, function($shot) {
if (is_numeric($shot)) {
return floatval($shot);
}
});
然后喷出完全相同的数组:
array:3 [
0 => "6.05"
1 => "5.94"
2 => "5.96"
]
为什么这些字符串?我告诉它将其转换为floatval
,这是我做错了吗?我疯了吗?
如果我死掉并在return语句上转储,我得到:6.05,而不是“ 6.05”,那么……为什么数组反映了这一点?
答案 0 :(得分:1)
array_filter
期望回调函数中的true
或false
保留或删除相应的元素。在您的实现中,除非您有一个0
或false值,否则它将始终返回true
。您希望array_map
实际上应用回调的返回:
$filteredShots = array_map(function($shot) {
if (is_numeric($shot)) {
return floatval($shot);
}
}, $shots);
您还可以使用array_walk
修改原始数组:
array_walk($shots, function(&$shot) {
if (is_numeric($shot)) {
$shot = floatval($shot);
}
});
您可以使用array_filter
删除非数字:
$filteredShots = array_filter($shots, function($shot) {
return is_numeric($shot) ? true : false;
});
//or simply
$filteredShots = array_filter($shots, 'is_numeric');