2

私はそのような配列を持っています

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

4 に答える 4

11
$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);
                        }
                      );

または、矢印関数を使用して、少し新しいPHPを使用します。

$result = array_filter( $data, 
                        fn($arrayEntry) => !is_numeric($arrayEntry)
                      );
于 2012-04-08T15:14:34.763 に答える
1

ループとintval関数を使用できます。

$filteredArray = array();
foreach($array as $element){
    //this works because PHP is weakly typed
    if(intval($element) != $element){
        $filteredArray[] = $element;
    }
}
于 2012-04-08T15:10:07.183 に答える
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
)
于 2012-04-08T15:20:39.377 に答える
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);
于 2012-04-09T03:50:55.460 に答える