Bekijk Volledige Versie : Array doorzoeken (leading zeros probleem)
$id = 000008;
$check = array(000008, 000009, 000010, 000011, 000014);
in_array($id, $check);
Als $id nu 08, 008 of 00000008 is, de functie in_array() zal altijd
zeggen dat mijn id in de array terug te vinden is. Maar dat wil ik niet!
Ik wil een exacte match van 000008 die in de array opgezocht wordt en
enkel dat geval moet true geven en alles met meer of minder nullen moet
false geven. Hoe los ik dit op?
Alvast bedankt!
In article <ft0_g.138949$MZ6.2435174@phobos.telenet-ops.be>,
Shenzou <black_onion@NOSPAMhotmail.com> writes:
> $id = 000008;
> $check = array(000008, 000009, 000010, 000011, 000014);
> in_array($id, $check);
>
> Als $id nu 08, 008 of 00000008 is, de functie in_array() zal altijd
> zeggen dat mijn id in de array terug te vinden is. Maar dat wil ik niet!
> Ik wil een exacte match van 000008 die in de array opgezocht wordt en
> enkel dat geval moet true geven en alles met meer of minder nullen moet
> false geven. Hoe los ik dit op?
>
> Alvast bedankt!
Door er een string ipv een integer van te maken bijvoorbeeld.
$id = '000008';
$check = array('000008', '000009', '000010', '000011', '000014');
Operator wrote:
>
> Door er een string ipv een integer van te maken bijvoorbeeld.
>
> $id = '000008';
> $check = array('000008', '000009', '000010', '000011', '000014');
Aha, ik had al zo een vermoeden. Het lukt mij echter niet.
$product_id = $_GET["prod"];
$query = mysql_query("SELECT productId FROM products");
while ($id = mysql_fetch_object($query))
$check[] = $id->productId;
if(isset($product_id) && in_array($product_id, $check))
Dit had ik dus oorspronkelijk. Maar als ik er
$product_id = '$_GET["prod"]'; // '' toegevoegd
$check[] = "$id->productId"; // "" toegevoegd
van maak dat wil het nog niet werken. Waar ga ik de mist in?
In article <1j2_g.139112$Ae2.2470016@phobos.telenet-ops.be>,
Shenzou <black_onion@NOSPAMhotmail.com> writes:
> Operator wrote:
>>
>> Door er een string ipv een integer van te maken bijvoorbeeld.
>>
>> $id = '000008';
>> $check = array('000008', '000009', '000010', '000011', '000014');
>
> Aha, ik had al zo een vermoeden. Het lukt mij echter niet.
>
> $product_id = $_GET["prod"];
>
> $query = mysql_query("SELECT productId FROM products");
Zorg dat productId van het type CHAR is.
> while ($id = mysql_fetch_object($query))
> $check[] = $id->productId;
Verander dit in een WHERE clause.
(Ik neem aan dat je best wel een paar products wilt hebben
en niet je hele geheugen wilt vullen met 000000 t/m 999999)
> if(isset($product_id) && in_array($product_id, $check))
>
>
> Dit had ik dus oorspronkelijk. Maar als ik er
>
> $product_id = '$_GET["prod"]'; // '' toegevoegd
Ik zou de " en ' van plaats verwisselen...
.... nee niet echt.
Ik zou een check functie maken die weet hoe een productId
er uit moet zien. (6 maal char uit de range 0..9 ? )
> $check[] = "$id->productId"; // "" toegevoegd
>
> van maak dat wil het nog niet werken. Waar ga ik de mist in?
Bij de analyse fase?
Branko Collin
20/10/06, 16:40
On Fri, 20 Oct 2006 11:21:33 GMT, Shenzou
<black_onion@NOSPAMhotmail.com> wrote:
> '$nummer'
Wat zou dit volgens jou moeten doen?
Strings en integers zijn verschillende 'type's. Een integer wordt niet
uitgevuld met nullen, en daarom zijn 8, 08, 008, 0008 enz. hetzelfde.
'8', '08', '008', '0008' enz. zijn echter allemaal verschillend. Zoals
Operator al aangaf, kun je daarom het beste strings van integers met
elkaar vergelijken.
Het ene type in het andere omzetten heet 'typecast'en. In PHP kan dat
op heel veel verschillende manieren:
$string = (integer) $nummer;
$string = sprintf("%d",$nummer);
$string = '' . $nummer;
$string = "$nummer";
enzovoort.
Welke methode de beste is hangt af van wat je precies wilt bereiken.
$string = sprintf("%d",$nummer) zul je bijvoorbeeld gebruiken als je
formulierwaarden wilt valideren.
Lees ook:
<http://www.php.net/manual/nl/language.types.type-juggling.php>
(helaas nu nog in het Engels).
--
branko collin
Volk van San Theodoros, ik heb U begrepen.
Branko Collin wrote:
>
> Welke methode de beste is hangt af van wat je precies wilt bereiken.
> $string = sprintf("%d",$nummer) zul je bijvoorbeeld gebruiken als je
> formulierwaarden wilt valideren.
>
> Lees ook:
> <http://www.php.net/manual/nl/language.types.type-juggling.php>
> (helaas nu nog in het Engels).
Aha, interessante lectuur.
Nu, ik ben ondertussen achter de oplossing gekomen. Zowel de elementen
in mijn array als di eik uit mijn URL plukte waren strings. Bleek mijn
fout te zitten in de functie in_array. Het moest in_array($product_id,
$check, true) ipv in_array($product_id, $check). Een kleinigheid met een
wezenlijk verschil :)
Allemaal bedankt voor de hulp, ik heb alleszins weer wat bijgeleerd.
Rene Pijlman
21/10/06, 02:00
Shenzou:
>Het moest in_array($product_id, $check, true) ipv in_array($product_id,
>$check). Een kleinigheid met een wezenlijk verschil :)
Yep, leve het onelegante PHP. Had je de interactieve comments in de manual
niet gelezen? Daarin staat toch duidelijk:
Beware that "Good morning"==0
--
René Pijlman
Wat wil jij leren? http://www.leren.nl
Warden Dave
21/10/06, 14:20
"Branko Collin" <collin@xs4all.nl> wrote:
> Een integer wordt niet uitgevuld met nullen, en daarom zijn
> 8, 08, 008, 0008 enz. hetzelfde.
Maar, let op, zo daadwerkelijk geschreven zal ook in PHP 08 ongelijk zijn
aan 8 (decimaal), omdat 08 (octaal) ongeldig is (het resultaat zal 0
zijn).
WD
Branko Collin
21/10/06, 18:20
On Sat, 21 Oct 2006 14:11:55 +0200, "Warden Dave"
<warden_dave@mnsys.invalid> wrote:
>"Branko Collin" <collin@xs4all.nl> wrote:
>
>> Een integer wordt niet uitgevuld met nullen, en daarom zijn
>> 8, 08, 008, 0008 enz. hetzelfde.
>
>Maar, let op, zo daadwerkelijk geschreven zal ook in PHP 08 ongelijk zijn
>aan 8 (decimaal), omdat 08 (octaal) ongeldig is (het resultaat zal 0
>zijn).
Kijk, dat wist ik weer niet.
Lijkt me typisch iets waar ik in de toekomst twee, drie uur aan kwijt
ga zijn. %-}
--
branko collin
Volk van San Theodoros, ik heb U begrepen.
Branko Collin wrote:
> On Sat, 21 Oct 2006 14:11:55 +0200, "Warden Dave"
> <warden_dave@mnsys.invalid> wrote:
>
>> "Branko Collin" <collin@xs4all.nl> wrote:
>>
>>> Een integer wordt niet uitgevuld met nullen, en daarom zijn
>>> 8, 08, 008, 0008 enz. hetzelfde.
>>
>> Maar, let op, zo daadwerkelijk geschreven zal ook in PHP 08 ongelijk
>> zijn aan 8 (decimaal), omdat 08 (octaal) ongeldig is (het resultaat
>> zal 0 zijn).
>
> Kijk, dat wist ik weer niet.
>
> Lijkt me typisch iets waar ik in de toekomst twee, drie uur aan kwijt
> ga zijn. %-}
Yup, voorafgegaan door 0 = octaal, door 0x = hexadecimaal.
16 = 16
016 = 14
0x16 = 22
Vandaar ook dat je bij chmod bijvoorbeeld 0777 invult in plaats van 777...
[ongelooflijke nerd-modus]
Als je het gewent bent, is trouwens octaal of hexadecimaal een stuk
makkelijk rekenen aangezien het machten van 2 zijn, maar zie dat maar eens
door (inter)nationaal te voeren...
[/nerd]
--
Rik Wasmus
Erick T. Barkhuis
27/10/06, 20:40
Rik:
> [ongelooflijke nerd-modus]
> Als je het gewent bent, is trouwens octaal of hexadecimaal een stuk
> makkelijk rekenen aangezien het machten van 2 zijn, maar zie dat maar eens
> door (inter)nationaal te voeren...
> [/nerd]
[octaal rekenen:]
Hoe reken jij dan het wisselgeld uit als je EUR 9,75 plus 19% moet
betalen en je een geeltje^H^H^H^briefje-van-20 euro geeft?
--
Erick