0

这是一个具有非数字值的数组示例。

$categoryRating = 

 array:3 [
  1 => 60.0
  2 => 50.0
  5 => "in-progress"
]

结果应该是:

array:3 [
  1 => 60.0
  2 => 50.0
]

这是我的代码:

array_filter($categoryRating[$category->id]

但结果与未过滤的相同。

$category只是一个集合,我将 id 分配为过滤结果的新键。

4

2 回答 2

0

编辑:我包括了 Kevin 的 oneliner:

$array = [1 => 60.0, 2 => 50.0, 5 => 'in-progress'];
$array = array_filter($array, 'is_numeric');
var_dump($array);

您是否尝试过类似的方法:

array_filter($categoryRating, function($v, $k) {
    return is_numeric($v);
}, ARRAY_FILTER_USE_BOTH));

它应该返回一个包含输入数组中所有数值的数组,但我还没有测试过。也许您只需要使用array_filter的 $callback 函数。

于 2020-12-15T06:45:26.533 回答
0

没有循环:

array_walk_recursive($categoryRating, function(&$value,$key){
    $value = filter_var($value,FILTER_SANITIZE_NUMBER_INT);
});

循环在这里:

$categoryRating = [60.0,50.0,6.5,'in-progress'];
    foreach ($categoryRating as $key => $val){
        $categoryRating = array_filter($categoryRating, function($val){
            return $val != is_string($val);
        });
    }
print_r($categoryRating);

如果数组中的数组:

$categoryRating =
        array([
            1 => 60.0,
            2 => 50.0,
            5 => "in-progress"
        ]);
    foreach ($categoryRating as $key => $val) {
        $categoryRating = array_filter($categoryRating[0], function ($val) {

            return $val != is_string($val);
        });
    }
    echo json_encode($categoryRating);
于 2020-12-15T06:58:06.707 回答