2016-05-15 20 views
0

Ich habe dieses numerische mehrdimensionale Array in PHP. Es ist Playfair Matrix und ich möchte die Schlüssel eines Buchstabens aus der Matrix bekommen.Numerisches mehrdimensionales Array php

Nehmen wir an, ich habe den Buchstaben "P", der in der dritten Zeile (0 bis 4) und der zweiten Spalte (0 bis 4) steht. Ich habe mehrere Dinge array_keys ausprobiert (funktioniert nicht so wie ich es will), funktioniert, um den Schlüssel der ersten Ebene des Arrays zu bekommen, macht das Array eindimensional und macht einige Zaubertricks ... Nichts funktioniert und ich hätte gerne Hilfe .

Dies ist die Funktion, die die Schlüssel der ersten Ebene wird:

function array_search2($needle, $haystack){ 
    $l = count($haystack); 
    for ($i=0; $i < $l; $i++) { 
     if (in_array($needle, $haystack[$i])) return $i; 
    } 
    return false; 
} 

Ich möchte mit den Buchstaben dieses Array haben, zwei Briefe von ihm zu bekommen, diese beiden Buchstaben ihre Koordinaten zu erhalten (von der PLayfair-Matrix) und um ihre Zeilen/Spalten zu vergleichen. Danke und ich poste jeden Code, der benötigt wird.

Edit: Ich bin alle Posting habe ich:

$keyword = str_replace(' ','', $_POST['keyword']); 
$plaintext = str_replace(' ','', $_POST['plaintext']); 

$key = str_split($keyword); //string to array 
$plain = str_split($plaintext); //string to array 

$alphabet = array(
       0 => 'a', 1 => 'b', 2 => 'c', 3 => 'd', 4 => 'e', 5 => 'f', 
       6 => 'g', 7=> 'h', 8 => 'i', 9 => 'j', 10 => 'k', 11 => 'l', 
       12 => 'm', 13 => 'n', 14 => 'o', 15 => 'p', 16 => 'q', 17 => 'r', 
       18 => 's', 19 => 't', 20 => 'u', 21 => 'v', 22 => 'w', 23 => 'x', 
       24 => 'y'); 
for ($i=0; $i < count($key); $i++) { 
     for ($j=0; $j < count($alphabet) ; $j++) { 
      if ($keyword[$i] == $alphabet[$j]) { 
       unset($alphabet[$j]); 
      } 
     } 
    } 
    $keywordFilpped = array_flip($key); 
    $alphabetFlipped = array_flip($alphabet); 

    $mergedFlipped = $keywordFilpped + $alphabetFlipped; 

    $i = 0; 
    foreach ($mergedFlipped as $key => $value) { 
     $mergedFlipped[$key] = $i; 
     $i++; 
    } 

    $merged = array_flip($mergedFlipped); 
$index = 0; 
    for ($i=0; $i < 5; $i++) { 
     for ($j=0; $j < 5; $j++) { 
      $matrix[$i][$j] = $merged[$index]; 
      $index++; 
     } 
    } 
    echo "PLAYFAIR MATRIX:<br>"; 
    for ($i=0; $i < 5; $i++) { 
     for ($j=0; $j < 5; $j++) { 
      echo $matrix[$i][$j]; 
     } 
      echo "<br>"; 
    } 
+0

Ihr Code haben eindimensionale Array, 'echo array_search ('p', $ Alphabet)' .. das sollte funktionieren –

+0

Ja, es sollte funktionieren, wenn ich von $ Alphabet suchen wollte, aber ich möchte $ Matrix suchen. Daher sollte ich zwei Schlüssel bekommen ($ i, $ j zum Beispiel). –

+0

Sie müssen auch keine numerischen Indizes angeben, php wird das automatisch tun. –

Antwort

0

, wenn Sie eine Matrix haben mit 2 wie folgenden Code überprüfen sollten:

for($i = 1; $i <= 11; $i++) 
{ 
    for($j = 1; $j <= 11; $j++) 
    { 
     if($array[$i][$j] == 'p') echo "row=$i and col = $j"; 
    } 
} 

im obigen Beispiel i überprüfen Alle Zeilen und Zeilen Spalten

Verwendung von dieser Funktion

function array_search2($needle, $haystack){ 
    $i = 0; 
    foreach($haystack as $key => $value) 
    { 
     $j = 0; 
     foreach($value as $key2 => $value2) 
     { 
       if($value2 == $needle) 
        return array($i, $j); 

       $j++; 
     } 
     $i++; 
    } 
    return false; 
} 

Diese Funktion gibt ein Array zurück, das Zeile und Spalte des gefundenen Status oder false enthält.

i mit folgenden Daten getestet:

$array = array(0 => array(0 => 'a', 1=> 'b'), 1 => array(0 => 'c', 1=> 'd')); 
print_r(array_search2('d', $array)); 
// out put Array ([0] => 1 [1] => 1) 
+0

Die Sache ist, dass ich nicht für einen Brief hardcore suchen werde. Das ist das Problem, das mich stört. –

+0

Ich habe neue Funktion für Sie –

+0

Vielen Dank !! Es klappt. Jetzt muss ich herausfinden, wie ich den Rest mache! Danke nochmal. –

0

ich Ihre Funktion verbessert haben, die Tasten, wenn Übereinstimmung gefunden wird, unabhängig von der Tiefe, siehe Beispiel unten zurück:

function getArrayKeys($needle, $haystack, $depth = 0) { 
    $keys = array(); 
    foreach($haystack as $key => $value) { 
     if(is_array($value)){ 
      $result = getArrayKeys($needle, $value, $depth + 1); 
      if(!empty($result) || $result === 0) { 
       if (is_array($result)) { 
        $keys = array_merge($keys, $result); 
       } else { 
        $keys[] = $result; 
       } 
       $keys[] = $key; 
      } 

      if(!empty($keys) && $depth > 0) 
       return $keys; 
     } elseif($value == $needle) { 
      return $key; 
     } 
    } 
    return !empty($keys) ? array_reverse($keys) : false; 
} 

$arr = array(
    array('A', 'B', 'C'), 
    array('D', 'F', 'E'), 
    array('Z', 'Y', 'X'), 
    array('f' => '44', 'g' => array('99')) 
); 
$keys = getArrayKeys('99', $arr); 

Ausgang:

Array 
(
    [0] => 3 
    [1] => g 
    [2] => 0 
) 

anzeigen läuft: https://eval.in/571698