2017-07-09 3 views
2

So habe ich die folgenden:PHP - array_search nicht wie erwartet funktioniert - funktioniert nicht dann

echo array_search('Resolved at Tier 1', array_column($getHighLevelOverviewPeriodsArray, 'status')); 
    print_r($getHighLevelOverviewPeriodsArray); 

    if (!array_search('Resolved at Tier 1', array_column($getHighLevelOverviewPeriodsArray, 'status'))) { 
     $resolved = array('status' => 'Resolved at Tier 1', 'amount' => 0); 
     array_splice($getHighLevelOverviewPeriodsArray, 0, 0, array($resolved)); 
    } 
    print_r($getHighLevelOverviewPeriodsArray); 

Das Echo spuckt eine Null aus, was recht ist. Es existiert in erster Linie. Allerdings läuft der zweite Teil (if-Anweisung) und die array_splice wird ausgeführt. Die Ausgabe von print_r ist unten.

Was wird ausgeführt, obwohl es da ist?

Ich habe den exakt gleichen Code für Tier 2, Zeichen für Zeichen (erwarten für die 2) und das funktioniert wie erwartet.

Array 
(
    [0] => Array 
     (
      [status] => Resolved at Tier 1 
      [amount] => 10 
     ) 

    [1] => Array 
     (
      [status] => Resolved at Tier 2 
      [amount] => 7 
     ) 

    [2] => Array 
     (
      [status] => Resolved Total 
      [amount] => 17 
     ) 

    [3] => Array 
     (
      [status] => Phone Calls 
      [amount] => 0 
     ) 

) 
Array 
(
    [0] => Array 
     (
      [status] => Resolved at Tier 1 
      [amount] => 0 
     ) 

    [1] => Array 
     (
      [status] => Resolved at Tier 1 
      [amount] => 10 
     ) 

    [2] => Array 
     (
      [status] => Resolved at Tier 2 
      [amount] => 7 
     ) 

    [3] => Array 
     (
      [status] => Resolved Total 
      [amount] => 17 
     ) 

    [4] => Array 
     (
      [status] => Phone Calls 
      [amount] => 0 
     ) 

) 
+0

Warum haben Sie array ($ resolved) am Ende Ihrer gespleißten Anweisung anstatt nur $ aufgelöst, da $ resolved bereits ein Array ist? – Difster

+0

Das war, was ich sah, musste getan werden, aber unabhängig davon - die Suche funktioniert immer noch nicht – pee2pee

+0

Erhalten Sie irgendwelche Fehler? Hast du die Protokolle überprüft? – Difster

Antwort

1

die Warnung im Handbuch http://php.net/manual/en/function.array-search.php lesen. 0 == false nach Typ Jonglieren. Sie benötigen:

if (false !== array_search ... 

statt:

if (!array_search... 

bearbeiten hinzuzufügen: Tier 2 funktioniert wie erwartet, weil Indizes größer als Null 'truthy' sind.

+0

if (false === array_search scheint es sortiert zu haben – pee2pee

Verwandte Themen