[php] vreemd gedrag strpos()

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Dorgaldir
  • Registratie: September 2009
  • Laatst online: 10-04 22:52

Dorgaldir

Creature of the web

Topicstarter
Ik heb een stukje code om na te gaan of barcodes voorkomen in een array, ik kon niet gewoon met de in_array werken omdat de values van de array meerdere barcodes kunnen bevatten, gescheiden door een ";".
De barcode kan ook bij meerdere key's terug komen, vandaar deze functie die als resultaat "False" geeft als het niet gevonden is, of een array met de sleutels waarbij de needle gevonden is in de value.

Echter krijg ik soms false positives, dit is de code:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    public function search_product_usercode_array($needle, $haystack){
        $ar = array();
        foreach ($haystack as $key => $item) {
            $pos = false;
            log_message('debug', "look for: " . $needle);
            log_message('debug', "in: " . $item);
            $pos = strpos($item, $needle);
            log_message('debug', "pos: " . $pos);
                if ($pos !== false) {
                    $ar[] = $key;
                }
        }
        if (isset($ar[0])){
            return $ar;
        }
        else{
            return false;
        }
    }


ik kreeg vreemd resultaat dus heb wat logs toegevoegd:
code:
1
2
3
4
5
6
7
8
9
10
11
12
DEBUG - 2015-09-02 15:47:06 --> look for: 11010098
DEBUG - 2015-09-02 15:47:06 --> in: 00061117
DEBUG - 2015-09-02 15:47:06 --> pos: 
DEBUG - 2015-09-02 15:47:06 --> look for: 11010098
DEBUG - 2015-09-02 15:47:06 --> in: 00061094
DEBUG - 2015-09-02 15:47:06 --> pos: 
DEBUG - 2015-09-02 15:47:06 --> look for: 11010098
DEBUG - 2015-09-02 15:47:06 --> in: 01060317
DEBUG - 2015-09-02 15:47:06 --> pos: 
DEBUG - 2015-09-02 15:47:06 --> look for: 11010098
DEBUG - 2015-09-02 15:47:06 --> in: 00060783
DEBUG - 2015-09-02 15:47:06 --> pos:


zo zouden de logs eruit moeten zien indien een code niet gevonden is.

MAAR... Af en toe krijg ik dit:

code:
1
2
3
4
5
6
7
8
9
10
11
12
DEBUG - 2015-09-02 15:47:06 --> look for: 11010104
DEBUG - 2015-09-02 15:47:06 --> in: 00061117
DEBUG - 2015-09-02 15:47:06 --> pos: 
DEBUG - 2015-09-02 15:47:06 --> look for: 11010104
DEBUG - 2015-09-02 15:47:06 --> in: 00061094
DEBUG - 2015-09-02 15:47:06 --> pos: 
DEBUG - 2015-09-02 15:47:06 --> look for: 11010104
DEBUG - 2015-09-02 15:47:06 --> in: 01060317
DEBUG - 2015-09-02 15:47:06 --> pos: 
DEBUG - 2015-09-02 15:47:06 --> look for: 11010104
DEBUG - 2015-09-02 15:47:06 --> in: 00060783
DEBUG - 2015-09-02 15:47:06 --> pos: 6



kan iemand mij uitleggen waarom hij positie 6 teruggeeft bij het zoeken van 11010104 in 00060783? Want ik snap het niet meer...

Just me


Acties:
  • 0 Henk 'm!

  • mbarie
  • Registratie: Mei 2011
  • Laatst online: 04-08-2021
getallen met prefix 0's gebruiken het octale getallenstelsel (gokje).

[ Voor 6% gewijzigd door mbarie op 02-09-2015 16:11 ]

Storyteller @ soundcloud


Acties:
  • 0 Henk 'm!

  • Dorgaldir
  • Registratie: September 2009
  • Laatst online: 10-04 22:52

Dorgaldir

Creature of the web

Topicstarter
code:
1
2
3
4
5
6
7
8
9
10
11
12
DEBUG - 2015-09-02 16:12:30 --> look for: 11010104
DEBUG - 2015-09-02 16:12:30 --> in: 00061117
DEBUG - 2015-09-02 16:12:30 --> pos: 
DEBUG - 2015-09-02 16:12:30 --> look for: 11010104
DEBUG - 2015-09-02 16:12:30 --> in: 00061094
DEBUG - 2015-09-02 16:12:30 --> pos: 
DEBUG - 2015-09-02 16:12:30 --> look for: 11010104
DEBUG - 2015-09-02 16:12:30 --> in: 01060317
DEBUG - 2015-09-02 16:12:30 --> pos: 
DEBUG - 2015-09-02 16:12:30 --> look for: 11010104
DEBUG - 2015-09-02 16:12:30 --> in: 00060783
DEBUG - 2015-09-02 16:12:30 --> pos:


ja... dat was het... Nog nooit problemen met octagonale getallen gehad :p

Heb er nu dit van gemaakt en dat geeft het bovenstaande correct resultaat.
PHP:
1
$pos = strpos((string)$item, (string)$needle);


thx _/-\o_

Just me