is_numeric

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Serghio
Δημοσιεύσεις: 455
Εγγραφή: 08 Φεβ 2011 19:20
Τοποθεσία: Περιστέρι

is_numeric

Δημοσίευση από Serghio » 16 Φεβ 2015 12:54

υπάρχει τρόπος να χρησιμοποιήσω το is_numeric για πολλές μεταβλητές "με τη μία";

θα μπορούσα να περάσω τις μεταβλητές σε array και εκεί να χρησιμοποιήσω foreach αλλά προσπαθώ να βρω μια λύση χωρίς να καταφύγω σε αυτό-αν γίνεται αυτό βέβαια

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

is_numeric

Δημοσίευση από korgr » 16 Φεβ 2015 13:27

Από όσο γνωρίζω μόνο μια μεταβλητή μπορείς να έχεις ως όρισμα.
Για πολλές χρειάζεται πίνακας και foreach

Άβαταρ μέλους
icinema
Δημοσιεύσεις: 36
Εγγραφή: 27 Ιαν 2015 16:08

is_numeric

Δημοσίευση από icinema » 16 Φεβ 2015 14:26

με την is_numeric() δεν παίρνεις μόνο integer.

αν θες να τσεκαρεις αν μια συμβλοσειρα ειναι μονο αριθμοι τοτε μπορεις πολυ πολυ απλα
να κανεις ενα Regex

βαλε ολες τις μεταβλητες σου σε ενα String πχ $myvar="12,324,24353,345345,345"
μετα καλεις την preg_match
και απλα καθάρησες.


if(!preg_match('/[0-9,]+/', $myvar))
{
$error = true;
echo 'please use number-alphabets and commas only';
}

Serghio
Δημοσιεύσεις: 455
Εγγραφή: 08 Φεβ 2011 19:20
Τοποθεσία: Περιστέρι

is_numeric

Δημοσίευση από Serghio » 16 Φεβ 2015 14:42

icinema έγραψε:με την is_numeric() δεν παίρνεις μόνο integer.

αν θες να τσεκαρεις αν μια συμβλοσειρα ειναι μονο αριθμοι τοτε μπορεις πολυ πολυ απλα
να κανεις ενα Regex

βαλε ολες τις μεταβλητες σου σε ενα String πχ $myvar="12,324,24353,345345,345"
μετα καλεις την preg_match
και απλα καθάρησες.


if(!preg_match('/[0-9,]+/', $myvar))
{
$error = true;
echo 'please use number-alphabets and commas only';
}
καλό αυτό αλλά στην περίπτωση ισως να μην κάνει...και εξηγούμαι:
έχω ένα array που δεν θέλω για όλα τα values του να τσεκάρω αν ειναι is_numeric...θέλω να κοιτάξω π.χ και για is_array...ή is_string

και εδώ ειναι το πρόβλημα...πως θα οργανώσω τον κώδικα για να κάνει αυτούς τους ελέγχους σε ένα array με 6-7 values...

Άβαταρ μέλους
icinema
Δημοσιεύσεις: 36
Εγγραφή: 27 Ιαν 2015 16:08

is_numeric

Δημοσίευση από icinema » 16 Φεβ 2015 14:44

δεν σε κατακλαβεινω δώσε ενα παραδειγμα του αρραυ που εχεις

Άβαταρ μέλους
jpk
Δημοσιεύσεις: 441
Εγγραφή: 09 Μαρ 2011 21:17

is_numeric

Δημοσίευση από jpk » 24 Φεβ 2015 14:20

Υπάρχουν πολλοί άλλοι τρόποι , ο πιο "λογικός" είναι με την array_filter , τον παραθέτω και μετά υπάρχει ένα ΑΛΛΑ

Κώδικας: Επιλογή όλων

<?php
$arrayToFilter = array&#40;"43","2343.32","aaaa"&#41;;
$arrayFiltered =  array_filter&#40;$arrayToFilter,"is_numeric"&#41;;
$isAllNumeric = count&#40;$arrayToFilter&#41; == count&#40;$arrayFiltered&#41;;
var_dump&#40;$isAllNumeric&#41;;
?>
Και εδώ πάμε στο ΑΛΛΑ , το οποίο μπορεί να μην λέει και πολλά στο συγκεκριμένο παράδειγμα αλλά έχει νόημα ως αντίληψη. Το πιθανότερο είναι κάποιος να πόνταρε ότι η χρήση της array_filter είναι αποδοτικότερη από το foreach , ίσως θα μπορούσε και ένα for loop με έναν επιπρόσθετο έλεγχο να ήταν ακόμα πιο αποδοτικό ΑΛΛΑ τίποτα από όλα αυτά στην PHP δεν είναι πιο γρήγορο από την foreach (παίρνει πολύ κουβέντα το γιατί συμβαίνει αυτό) , και δεδομένου ότι ο κώδικας που παράγεται με την foreach είναι απλούστερος στην κατανόηση με μια ματιά , ο νικητής είναι κατ' εμέ η foreach . Εδώ ένα test

Κώδικας: Επιλογή όλων

<?php

$arr = array&#40;"43","2343.32","234243.23","2342434","12","543","54323","3212","er","123","aaaa"&#41;;
$testTimes = 100000;

// Array Filter
$start = microtime&#40;true&#41;;
for&#40;$times=0; $times<$testTimes; $times++&#41;
&#123;
  $result = count&#40;$arr&#41; == count&#40;array_filter&#40;$arr,"is_numeric"&#41;&#41;;
&#125;
$end = microtime&#40;true&#41;;
echo "case Array Filter&#58; &#40;".$end." - ".$start."&#41; = ".&#40;$end-$start&#41;;
echo "<br/>";
var_dump&#40;$result&#41;;
echo "<br/><br/>";

// Simple Foreach
$start = microtime&#40;true&#41;;
for&#40;$times=0; $times<$testTimes; $times++&#41;
&#123;
  $result = true;
  foreach&#40;$arr as $key => $value&#41;
  &#123;
    if&#40;!is_numeric&#40;$value&#41;&#41;
    &#123;
      $result = false;
    &#125;
  &#125;
&#125;
$end = microtime&#40;true&#41;;
echo "case Simple Foreach&#58; &#40;".$end." - ".$start."&#41; = ".&#40;$end-$start&#41;;
echo "<br/>";
var_dump&#40;$result&#41;;
echo "<br/><br/>";

// For loop
$start = microtime&#40;true&#41;;
for&#40;$times=0; $times<$testTimes; $times++&#41;
&#123;
  $result = true;
  for&#40;$i=0; $result && $i<count&#40;$arr&#41;; $i++&#41;
  &#123;
    if&#40;!is_numeric&#40;$arr&#91;$i&#93;&#41;&#41;
    &#123;
      $result = false;
    &#125;
  &#125;
&#125;
$end = microtime&#40;true&#41;;
echo "case For loop&#58; &#40;".$end." - ".$start."&#41; = ".&#40;$end-$start&#41;;
echo "<br/>";
var_dump&#40;$result&#41;;
echo "<br/><br/>";

?>

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες