2017-03-23 3 views
0

Ich muss nach dem Index eine Zeichenfolge im folgenden Array suchen, nachdem es explodiert wurde. Im Beispiel müsste ich den Index für "wirklich" finden. Wie kann ich das machen?So suchen Sie nach dem Index einer Zeichenfolge in einem zweidimensionalen Array

function explode2D($row_delim, $col_delim, $str) { 
     return array_map(function ($line) use ($col_delim) { 
      return explode($col_delim, $line); 
     }, explode($row_delim, $str)); 
    } // - slick coding by trincot 


$string = 'red<~>blue<~>orange[|]yellow<~>purple<~>green[|]really<~>dark<~>brown'; 

$array = explode2D("[|]", "<~>", $string); 

diese zurück

Array 
(
    [0] => Array 
     (
      [0] => red 
      [1] => blue 
      [2] => orange 
     ) 

    [1] => Array 
     (
      [0] => yellow 
      [1] => purple 
      [2] => green 
     ) 

    [2] => Array 
     (
      [0] => really 
      [1] => dark 
      [2] => brown 
     ) 

) 

so habe ich versucht, diese

$search = 'really'; 

$index = array_search($search, $array); 

print($index); 

nichts :(

+0

Siehe [Mehrdimensionale Array-Suche (Schlüssel nach spezifischem Wert suchen)] (http://stackoverflow.com/questions/8102221/php-multidimensional-array- Suche-finde-Schlüssel-nach-spezifischem-Wert). –

Antwort

1

array_search wird nicht funktionieren, weil Sie nach einer Zeichenkette in einem Array suchen von Arrays. Sie müssen über die äußere ar Schleife ray und array_search jeweils in diesem Array.

foreach ($array as $key => $set) { 
    $index = array_search($search, $set); 
    if (false !== $index) { 
     echo "Found '$search' at index $index of set $key"; 
     break; 
    } 
} 

Ich bin nicht sicher, welcher Index Sie suchen, denn mit einer Struktur wie diese, gibt es zwei Indizes, in denen Ihr Suchtext anzuzeigen ist, eine für die äußeree Anordnung und ein für die innere Anordnung . Aber wenn Sie die Schleife unterbrechen, nachdem $search gefunden wurde, dann wird $key der richtige Index des äußeren Arrays an diesem Punkt sein, so dass Sie beide haben.

0
for ($i = 0; $i < count($array); $i++) { 
    if (($key = array_search($search, $array[$i])) !== false) { 
     var_dump(array($i, $key)); 
    } 
} 
+0

Während dieses Code-Snippet willkommen ist und vielleicht etwas Hilfe bietet, wäre es [erheblich verbessert, wenn es eine Erklärung enthielt] (// meta.stackexchange.com/q/114762) von * wie * und * warum * das löst das Problem Problem. Denken Sie daran, dass Sie die Frage für Leser in der Zukunft beantworten, nicht nur die Person, die jetzt fragt! Bitte [bearbeiten] Sie Ihre Antwort, um eine Erläuterung hinzuzufügen und geben Sie an, welche Einschränkungen und Annahmen gelten. –

0

Versuchen:

$search = 'really'; 

$index = -1; 
$location = []; 

foreach($i = 0; $i < sizeof($array); $i++){ 
    for($j = 0; $j < sizeof($array[$i]); $j++){ 
     if($search == $array[$i][$j]){ 
      $location = [$i, $j]; 
      $index++; 
      break; 
     } else { 
      $index++; 
     } 
    } 
} 

print_r($location); // This gives you the position where the match is found i.e. [2, 0]; 
echo $index; // This is the direct index of the search result i.e. 6 

print($index); 

Diese funktionieren sollte. Habe es nicht versucht, aber es sollte ...

Verwandte Themen