我有一个像这样的数组
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 ,但没有成功。有人可以告诉我该怎么办?感谢
答案 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);