2016-03-31 11 views
2

Ich habe eine Linie mit Zahlen als String:Count verschiedene „Räume“ zwischen einer gegebenen Anzahl

$numbers = x, 5, 7, x, 9, 4, x, 3, 9, 5, x, ... 

Jetzt möchte ich zwischen dem x die „Dauer“ zählen.

'x' erscheint:

2x times after [2] numbers 
1x times after [3] numbers 

Ich kann einfach nicht herausfinden, welche Methode in PHP das Beste ist, dieses Problem zu lösen.

Danke!

+2

Es gibt keine Methode, die das für Sie tut, Sie müssen Ihre eigene Logik programmieren. ** Tipp: ** Verwenden Sie loops.and die 'explode()' -Funktion. – Daan

+0

Hey Daan, derzeit gehe ich manuell durch die Liste, dachte, es gibt vielleicht eine Lösung in PHP dafür. Edit: Danke für den Tipp mit explode und den Loops - schau es dir an! – mistertodd

+1

'foreach()', 'explode()' und verwenden Sie einen Zähler in einer 'switch()' oder 'if()' Anweisung? Oder eine ** Callback ** -Methode erstellen, nur ein paar Vorschläge – KDOT

Antwort

1

Wenn die Zahlen immer 0-9 sind, können Sie die Kommata und Leerzeichen entfernen und strpos verwenden, um herauszufinden, wo sich die x befinden. Keine Explosionen benötigt.

$numbers = 'x, 5, 7, x, 9, 4, x, 3, 9, 5, x'; 
$string = str_replace(', ', '', $numbers); 

$index = 0; 
$previousPosition = 0; 
$positionDifferences = array(); 

while($index < strlen($string)){ 
    $index = strpos($string, 'x', $index); 
    $diff = $index - $previousPosition; 
    $positionDifferences[] = $diff; 
    $index++; 
    $previousPosition = $index; 
} 

jetzt $positionDifferences wird ein Array mit allen Unterschieden zwischen den Vorkommen von ‚x‘ halten. In diesem Beispiel: Array ([0] => 0 [1] => 2 [2] => 2 [3] => 3)

Verwandte Themen