仅使用数组中的数字删除值 - PHP

时间:2012-04-08 15:07:33

标签: php arrays digits

我有一个像这样的数组

array(
      1=>hello,
      2=>foo,
      3=>192,
      4=>keep characters AND digits like a1e2r5,
);

我想要做的就是删除仅包含数字(3=>192)的行,并返回一个这样的数组:

array(
      1=>hello,
      2=>foo,
      3=>keep characters AND digits like a1e2r5,
);

我尝试使用 array_filter ,但没有成功。有人可以告诉我该怎么办?感谢

4 个答案:

答案 0 :(得分:10)

$data = array( 1 => "hello", 
               2 => "foo", 
               3 => "192", 
               4 => "keep characters AND digits like a1e2r5", 
             );

$result = array_filter( $data, 
                        function($arrayEntry) { 
                            return !is_numeric($arrayEntry);
                        }
                      );

答案 1 :(得分:1)

您可以使用循环和intval函数。

$filteredArray = array();
foreach($array as $element){
    //this works because PHP is weakly typed
    if(intval($element) != $element){
        $filteredArray[] = $element;
    }
}

答案 2 :(得分:0)

您确定正确使用array_filter吗?这是解决问题的最佳方案。

// named callback for backwards compatibility, but use an anonymous function
// if you have a high enough php version.
function callback($item) { return !is_numeric($item); }

$result = array_filter($a, 'callback');
print_r($result);

// optional - causes numeric keys to be in order
$result = array_values($result);
print_r($result);

使用问题的示例输入输出为$ a:

Array
(
    [1] => hello
    [2] => foo
    [4] => keep characters AND digits like a1e2r5
)

Array
(
    [1] => hello
    [2] => foo
    [3] => keep characters AND digits like a1e2r5
)

答案 3 :(得分:0)

我很惊讶没有人在任何答案中提到这一点:使用数字测试并不是一个完整的解决方案。如果将数字测试评估为数字,则使用数字测试将删除包含非数字字符的某些元素。具体来说,{e, - ,。}

$data=array(
  1=>'hello',
  2=>'foo',
  3=>'192',
  4=>'keep characters AND digits like a1e2r5',
  5=>'1.4',
  6=>'-42',
  7=>'1e2',
  8=>'1.23e4',
); 
function callback1($arrayEntry) { 
    return !is_numeric($arrayEntry);
}
$result = array_filter( $data, 'callback1');

echo '<pre>';
print_r($result);

echo '<hr>';
function callback2($arrayEntry) { 
    return !preg_match('/^[0-9]+$/', $arrayEntry);
}
$result = array_filter( $data, 'callback2');
print_r($result);