[PHP] if (is_int(/*alle waarden van array*/)) { }

Pagina: 1
Acties:

  • DRvDijk
  • Registratie: Juni 2001
  • Laatst online: 12-02 15:52
Hmm, zo'n "goeie" topictitel heb ik in tijden niet gehad! :D

Om mijn eigen sig eer aan te doen wil ik controleren of de elementen van de array die mijn functie binnenkomt wel allemaal integers zijn. Normaal krijg ik geen array binnen in een functie (lees nog niet eerder gebruikt), en dan is het redelijk makkelijk te controleren:
PHP:
1
2
3
4
function check($input) {
  if ((isset($input)) && (is_int($input))) return true;
  else return false;
} // function

Maar wat nou als er dan een array binnenkomt? Elk element in die array moet een integer zijn. Nou kan ik inderdaad heel makkelijk een functietje schrijven die even door die array heenloopt, maar tsja, da's wéér een redelijk "onzinnige" functie in mijn class.. Ik zou dus zoiets willen (als díé functie eens zou bestaan ;)):
PHP:
1
2
3
4
function check($input) {
  if ((isset($input)) && (is_array($input)) && (all_arrayvalues_are_int($input)) { /*commands*/ }
  else return false;
} // function

  • DRvDijk
  • Registratie: Juni 2001
  • Laatst online: 12-02 15:52
Ghe, ik bedenk me ineens een lompe manier :P
PHP:
1
if (preg_match("/^[0-9]+(\|[0-9]+)$/", implode("|", $input))) { /*commands*/ }

  • DRvDijk
  • Registratie: Juni 2001
  • Laatst online: 12-02 15:52
PHP:
1
preg_match("/^\d+$/", @implode("", $input))
ook natuurlijk :)

[ edit ]
Er moet dan dus wel een @ voor de implode..
PHP:
1
2
$input = array(1, 2, array(1, 2, 3), 3, 4);
if (preg_match("/^\d+$/", implode("", $input))) { /* commands */ }

geeft een Array to String conversion error :P
[ / edit ]

  • Grum
  • Registratie: Juni 2001
  • Niet online
Geen preg_* functies gebruiken als je niet specifiek 'p' functionaliteit nodig hebt.

ereg/eregi volstaan hier ook.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 21:01

.oisyn

Moderator Devschuur®

Demotivational Speaker

een array imploden naar een stuk tekst en er dan vervolgens regexen eropaf laten lijkt mij een beetje omslachtige methode eerlijk gezegd... en totaal niet efficient (de array moet geimplode worden, dus nieuw geheugen moet gealloceerd worden om de nieuwe string in te zetten, dan moet de regex nog gecompiled worden, en dan moet de hele string nagelopen worden)
je kunt toch ook gewoon met foreach alle elementen af gaan en dan kijken of het huidige element een int is?

PHP:
1
2
3
4
5
6
7
8
9
10
11
function check($input)
{ 
    if (!isset($input)) || !is_array($input))
        return false;

    foreach ($input as $i)
        if (!is_int ($i))
            return false;

    // ... je code ...
}

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Ik ben het met .oisyn eens, alleen zou ik zoiets doen:

PHP:
1
2
3
4
5
6
7
8
9
10
<?
function check($input) { 
  if(is_array($input)
  {
       // ... de code van .oisyn
   }
  elseif ((isset($input)) && (is_int($input))) return true; 
  else return false; 
} // function
?>

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

een simpel recursief voorbeeldje
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function is_int2($mInput)
{
    if (is_array($mInput))
    {
        $bRetval = (count($mInput) > 0);
        while (($bRetval == TRUE) && (list(, $mValue) = each($mInput)))
        {
            $bRetval = is_int2($mValue);
        }
        return $bRetval;
    }
    else
    {
        return is_int($mInput);
    }
}

Today's subliminal thought is:


  • Skinny
  • Registratie: Januari 2000
  • Laatst online: 25-07 18:17

Skinny

DIRECT!

Als ik je goed begrijp, is dit mijn ingeving :

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
error_reporting( E_ALL );


function mijn_funktie( $value )
{

        if( is_array( $value ) )
        {
                if( count( array_filter( $value, "is_int" ) ) == count( $value ) )
                {
                        print "Allemaal integers\n";
                } else
                {
                        print "Niet allemaal integers\n";
                }
        } else
        {
                if( is_int( $value ) )
                        print "Een integer\n";
                else
                        print "Geen integer\n";
        }
}


$input = Array("1", 2, 3, 4, "5", "6", 7 );
mijn_funktie( $input );

$input = 1;
mijn_funktie( $input );

$input = "1";
mijn_funktie( $input );

$input = Array( 1, 2, 3 );
mijn_funktie( $input );



geef als resultaat :

code:
1
2
3
4
5
mark@trinity:/www/dev$ php4 -q array.php 
Niet allemaal integers
Een integer
Geen integer
Allemaal integers



In jouw geval dus :
PHP:
1
2
3
4
5
6
<?
function check($input) { 
  if ((isset($input)) && (is_array($input)) && (count( array_filter( $input, "is_int" ) ) == count( $input)) { /*commands*/ } 
  else return false; 
} // function
?> 

SIZE does matter.
"You're go at throttle up!"


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 21:01

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op 04 september 2002 @ 21:34:
Ik ben het met .oisyn eens, alleen zou ik zoiets doen:

PHP:
1
2
3
4
5
6
7
8
9
10
<?
function check($input) { 
  if(is_array($input)
  {
       // ... de code van .oisyn
   }
  elseif ((isset($input)) && (is_int($input))) return true; 
  else return false; 
} // function
?>


dit klopt niet, de code moet alleen uitgevoerd worden als alle elementen van de array ints zijn, en in de andere gevallen (dus dat $input geen array is enzo) moet ie false returnen

de isset () check lijkt mij een beetje nutteloos op een functie variabele: dan is ie namelijk altijd geset (en als je een functie aanroept met als parameter een variabele die nog niet geset is krijg je de error voor de functieaanroep)

dus eigenlijk moet het zo:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
is het een array?
{
    zijn alle elementen van de array een int?
    {
        ... hier je code ...
    }
    zoniet
    {
        return false;
    }
}
zoniet
{
    return false;
}

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Skinny
  • Registratie: Januari 2000
  • Laatst online: 25-07 18:17

Skinny

DIRECT!

Zie ik daar enige overeenkomsten ;) :P

SIZE does matter.
"You're go at throttle up!"


  • DRvDijk
  • Registratie: Juni 2001
  • Laatst online: 12-02 15:52
.oisyn schreef op 05 september 2002 @ 00:01:
[...]
de isset () check lijkt mij een beetje nutteloos op een functie variabele: dan is ie namelijk altijd geset (en als je een functie aanroept met als parameter een variabele die nog niet geset is krijg je de error voor de functieaanroep)
[...]
funtion(null);
Dan is de variabele niet geset..

Die array_filter.. Seems like een goeie oplossing, nog niet eens óp gekomen! :P Maar waarom zouden jullie het wel/niet gaan gebruiken?

  • DRvDijk
  • Registratie: Juni 2001
  • Laatst online: 12-02 15:52
Skinny schreef op 05 september 2002 @ 00:10:
Zie ik daar enige overeenkomsten ;) :P
Nope :P Staat toch echt wat anders :) .oisyn pakt echt alleen maar arrays die uit elementen bestaat die integers pakken, die andere code _J_R_R pakt ook "normale" ints (die dus niet een element van een array zijn).

[ Voor 0% gewijzigd door DRvDijk op 05-09-2002 00:16 . Reden: FSPG ]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 21:01

.oisyn

Moderator Devschuur®

Demotivational Speaker

elviver schreef op 05 september 2002 @ 00:14:
[...]

funtion(null);
Dan is de variabele niet geset..


ja, en is_array (null) geeft ook gewoon false, en geen error :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • DRvDijk
  • Registratie: Juni 2001
  • Laatst online: 12-02 15:52
.oisyn schreef op 05 september 2002 @ 00:18:

[...]


ja, en is_array (null) geeft ook gewoon false, en geen error :)
Maar als ik dit heb:
PHP:
1
2
3
4
5
function bla($bla) {
  if (isset($bla)) print "Gezet";
  else print "Niet gezet";
} // function
bla(null);

print ie toch echt "Niet gezet"

edit:
O op die fiets :P

[ Voor 0% gewijzigd door DRvDijk op 05-09-2002 00:23 . Reden: Ik begrijp ut alweer :P ]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 21:01

.oisyn

Moderator Devschuur®

Demotivational Speaker

je begrijpt niet wat ik bedoel

stel je hebt deze code:
PHP:
1
2
3
4
5
6
7
8
9
function func ($var)
{
    if (isset ($var) && is_array ($var)
    {
        // ...
    }
    else
        return false;
}


de isset is hier totaal overbodig, want als je func (null) aanroept dan zal is_array () false returnen

.edit: ja zo ja ;)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • DRvDijk
  • Registratie: Juni 2001
  • Laatst online: 12-02 15:52
offtopic:
Zie de edit ;)
Pagina: 1