2012-04-08 33 views
2

我有一個像這樣只能從陣列中刪除與數位值 - PHP

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

所有我想要做的一個數組是刪除了包含數字ONLY (3=>192)行,並返回一個數組像這樣的:

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

我試過array_filter但沒有得到它的工作。有人可以告訴我該怎麼做?謝謝

回答

9
$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); 
         } 
        ); 
+0

太棒了! Mark的解決方案非常完美。謝謝 – Neoweiter 2012-04-08 15:19:46

+0

+1,比我的方式更好。 – 2012-04-08 15:21:52

+1

請小心使用此解決方案。它只用數字刪除行,但不相應地調整任何數字索引。當然,這可能是你想要的,在這種情況下,從來沒有想過。 – Cam 2012-04-08 15:26:24

1

你可以使用循環和intval函數。

$filteredArray = array(); 
foreach($array as $element){ 
    //this works because PHP is weakly typed 
    if(intval($element) != $element){ 
     $filteredArray[] = $element; 
    } 
} 
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 
) 
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);