Frage

Eine weitere bevorzugte, oder besser über den anderen?

War es hilfreich?

Lösung

is_int() true zurück, wenn das Argument ein Integer-Typ ist, ctype_digit() nimmt ein String-Argument und gibt true zurück, wenn alle Zeichen in der Zeichenfolge sind Ziffern.

Beispiel:

┌──────────┬───────────┬────────────────┐
│          │  is_int:  │  ctype_digit:  │
├──────────┼───────────┼────────────────┤
│ 123      │  true     │  false         │
├──────────┼───────────┼────────────────┤
│ 12.3     │  false    │  false         │
├──────────┼───────────┼────────────────┤
│ "123"    │  false    │  true          │
├──────────┼───────────┼────────────────┤
│ "12.3"   │  false    │  false         │
├──────────┼───────────┼────────────────┤
│ "-1"     │  false    │  false         │
├──────────┼───────────┼────────────────┤
│ -1       │  true     │  false         │
└──────────┴───────────┴────────────────┘

Andere Tipps

Es gibt auch is_numeric , die im Wert, wenn übergeben true zurück kann als Nummer analysiert werden.

Wenn ich versuche, auf PHP 5.5.30 Leistung von Funktionen zu vergleichen hier sind die Ergebnisse:

Dies ist der Code, den ich für Benchmark

// print table cell and highlight if lowest value is used
function wr($time1, $time2, $time3, $i) {
    if($i == 1) $time = $time1;
    if($i == 2) $time = $time2;
    if($i == 3) $time = $time3;

    echo('<td>');
    if(min($time1, $time2, $time3) === $time) printf('<b>%.4f</b>', $time);
    else printf('%.4f', $time);
    echo('</td>');
}


$test_cases = array( 123, 12.3, '123', true);
$tests = 1000000;
$result = true;  // Used just to make sure cycles won't get optimized out
echo('<table>'.PHP_EOL);
echo('<tr><td>&nbsp;</td><th>is_int</th><th>ctype_digit</th><th>is_numeric</th></tr>');
foreach($test_cases as $case) {
    echo('<tr><th>'.gettype($case).'</th>');

    $time = microtime(true);
    for($i = 0; $i < $tests; $i++) {
        $result |= is_int((int)rand());
    }
    $time1 = microtime(true)-$time;

    $time = microtime(true);
    for($i = 0; $i < $tests; $i++) {
        $result |= ctype_digit((int)rand());
    }
    $time2 = microtime(true)-$time;

    $time = microtime(true);
    for($i = 0; $i < $tests; $i++) {
        $result |= is_numeric((int)rand());
    }
    $time3 = microtime(true)-$time;

    wr($time1, $time2, $time3, 1);
    wr($time1, $time2, $time3, 2);
    wr($time1, $time2, $time3, 3);
    echo('</tr>'.PHP_EOL);
}

echo('</table>');

exit();

Das letzte, was Sie werden sich Gedanken sollten, ist, wie schnell eine davon ist. Es gibt keine Möglichkeit, dass ein Zeichenfolge Überprüfung für eine ganze Zahl ein Engpass in Ihrem Code sein wird.

ctype nicht immer return false auf Integer-Typ.

foreach(range(-1000 , 1000)as $num){
    if(ctype_digit($num)){
        echo $num . ", ";
    }    
}

ctype_digit return true für die folgende Integer-Typ-Nr.

-78, -77, -71,48,49,50,51,52,53,54,55,56,57,178,179,185, 256.257.258.259.260.261.262.263.264.265.266.267.268.269.270 bis 1000

die Basis der Praxis ist jede Zahl zu String e.q. Fall strval ($ num) oder (String) $ num in diesem Fall negativen Wert (-78) immer false zurück.


is_int kehren Sie zwischen -2147483647 bis 2147483647 auf int-Typ Wert true. jeder Wert überschreitet diese Zahl wird Sie false zurück vorausgesetzt, es auf 32-Bit-System ausgeführt wird. auf 64bits kann es auf einen Bereich von -9223372036854775807 bis 9223372036854775807 steigen


in der Bezeichnung der Leistung persönlich sehr schwer zu sagen. ctype_digit vielleicht schneller als is_int aber wenn Sie jeden Wert Stringleistung zu werfen haben wird insgesamt reduziert.

Wenn Sie nicht wirklich egal, ob das Argument vom Typ int ist oder eine Zeichenkette mit Zahlen, verwendet is_numeric. Es wird für Schwimmer true zurück, auch tho.

ctype_digit false zurück, wenn der Bereich von Integer in negativem Bereich oder zwischen 0 und 47 oder zwischen 58 und 255. Sie können mit dem folgenden Code-Schnipsel ctype_digit Verhalten überprüfen.

setlocale(LC_ALL, 'en_US.UTF-8');
var_dump(
    true === array_every(range(-1000, -1), 'ctype_digit_returns_false'),
    true === array_every(range(0, 47), 'ctype_digit_returns_false'),
    true === array_every(range(48, 57), 'ctype_digit_returns_true'),
    true === array_every(range(58, 255), 'ctype_digit_returns_false'),
    true === array_every(range(256, 1000), 'ctype_digit_returns_true')
);

// https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/every
function array_every(array $array, $callable)
{
    $count = count($array);

    for ($i = 0; $i < $count; $i +=1) {

        if (!$callable($array[$i])) {

            return false;

        }

    }

    return true;
}

function ctype_digit_returns_true($v)
{
    return true === ctype_digit($v);
}

function ctype_digit_returns_false($v)
{
    return false === ctype_digit($v);
}

Auch ist es sehr interessant :) Hier ist die ganze Geschichte:

is_numeric: — Sucht, ob eine variable eine Zahl oder ein numerischer string, egal, Wert negativ oder Boolean oder String oder jede Art der Zahl, wenn der Wert rein-Nummer zurück 'true' anderes 'false'.

Denken Sie daran:Kein Charakter, Nur die Anzahl jeder Art :)


is_init— Finden, ob der Typ einer variable ist integer, wenn der Wert ist rein integer, dann wird es Rückkehr 'true' else 'false'.

Denken Sie daran:Keine Charakter -, Doppel-oder Negativ -, die Nur Ganzzahlige


in_integer— Alias von is_int()


intval:— Holen Sie sich die integer-Wert einer variable, der es nehmen alle Arten von Wert und gibt nur den Ganzzahligen Wert, wenn die Werte negativ sind, dann zurück '-Integer'Wert.Egal Werte sind Integer, Float, Negative oder 'NumberString"oder"NumberStringCharacter'.Es ist, subtrahieren Sie die Integer-Werte aus dem string "If String Starts with Number".

  • NumberString = Eine Zahl Wert in String-Format
  • NumberStringCharacter = Eine Zeichenkette mit startnummer

Denken Sie daran:Erhalten Sie den Ganzzahligen Wert von Zahl, Float, Negative oder Zeichenkette, die beginnt mit der Zahl.


ctype_digit— Überprüfen Sie die numerische(s) Zeichen, Wenn eine Ganze Zahl lieferte im String-Format, die Sie erhalten"true'else 'false'.Es wird arbeiten mit nur StringNumber, Keine Schwimmer, Keine Negativen einzige Ganze Zahl als String.

Denken Sie daran:Ganze Zahl als String, Nicht Negative Zahl, Keine Float-Zahl, Keine Zahl Geben, Keinen Charakter, Nur die Nummer als String.

Vögel Auge Ansicht:

enter image description here

Dank http://php.net/

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top