在php中过滤字符串数组

时间:2018-07-11 18:06:31

标签: php arrays array-filter

所以我有以下数组:

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”,那么……为什么数组反映了这一点?

1 个答案:

答案 0 :(得分:1)

array_filter期望回调函数中的truefalse保留或删除相应的元素。在您的实现中,除非您有一个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');