5


1 つ以上の変数に数値が含まれているかどうかを検出しようとしています。いくつかの異なる方法を試しましたが、完全に成功したわけではありません。

これが私が試したことです。

<?php
$one = '1';
$two = '2';

$a1 = '3';
$a2 = '4';
$a3 = '5';


$string_detecting_array = array(); 

array_push($string_detecting_array, $one,$two,$a1,$a2,$a3); 

foreach ($string_detecting_array as $key) { 
    if (is_numeric($key)) {
        echo 'Yes all elements in array are type integer.';
    } 
    else {
        echo "Not all elements in array were type integer.";
    }
}

?>



この方法を使用してもうまくいきませんでした。何か案は?前もって感謝します!

4

7 に答える 7

7

まず、ループロジックが間違っています。評決に達する前に、配列内のすべてのアイテムを処理する必要があります。これを行うための最短の(最も明白ではありませんが)方法は、

$allNumbers = $array == array_filter($array, 'is_numeric');

これが機能するのは、キーarray_filterを保持し、要素数、キー、および値をチェックして配列を比較する==ためです(ここでの値はプリミティブであるため、簡単に比較できます)。

より平凡な解決策は

$allNumbers = true;
foreach ($array as $item) {
    if (!is_numeric_($item)) {
        $allNumbers = false;
        break;
    }
}

// now $allNumbers is either true or false

フィルタ機能について:文字のみを許可する場合は09を使用します。ただしctype_digit、前にマイナス記号を使用することはできません。

is_numeric符号は許可されますが、浮動小数点数と16進数も許可されます。

gettypeこの場合、配列には数値ではなく数値文字列が含まれているため、機能しません。

于 2012-05-02T16:47:02.740 に答える
5

gettype変数が数値であるかどうかを明示的に知りたい場合に使用できます。を使用is_numericすると、タイプは尊重されません。

使用するつもりであるが、すべてのis_numeric要素が使用されているかどうかを知りたい場合は、次の手順に従ってください。

$all_numeric = true;
foreach ($string_detecting_array as $key) { 
    if (!(is_numeric($key))) {
        $all_numeric = false;
        break;
    } 
}

if ($all_numeric) {
    echo 'Yes all elements in array are type integer.';
} 
else {
    echo "Not all elements in array were type integer.";
}
于 2012-05-02T16:46:09.487 に答える
4

とチェーンarray_maparray_productて、ワンライナー式を取得できます。

if (array_product(array_map('is_numeric', $string_detecting_array))) {
    echo "all values are numeric\n";
} else {
    echo "not all keys are numeric\n";
}
于 2012-05-02T16:50:41.587 に答える
1

これを使用できます:

$set = array(1,2,'a','a1','1');  

if(in_array(false, array_map(function($v){return is_numeric($v);}, $set)))
{
    echo 'Not all elements in array were type integer.';
}
else
{
    echo 'Yes all elements in array are type integer.';
}
于 2012-05-02T17:40:24.307 に答える
0

使用するgettype()

http://php.net/manual/en/function.gettype.php

于 2012-05-02T16:47:22.117 に答える
0

フラグを立てて、すべてのアイテムを確認する必要があります。

$isNumeric = true;
foreach ($string_detecting_array as $key) { 
    if (!is_numeric($key)) {
        $isNumeric = false;
    }
}

if ($isNumeric) {
    echo 'Yes all elements in array are type integer.';
} 
else {
    echo "Not all elements in array were type integer.";
}
于 2012-05-02T16:49:35.627 に答える