Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    algoritmo ricerca con chiave "multidimensionale"

    Salve a tutti
    il mio problema è il seguente: ho una matrice tipo:

    [0][0][1][0][0][0][0][0]
    [0][1][0][0][0][0][0][1]
    [0][0][0][0][0][0][0][0]
    [0][0][1][1][1][0][0][0]
    [0][0][1][0][1][0][0][0]
    [0][0][1][1][1][0][0][0]
    [0][0][0][0][0][0][0][0]
    [1][0][0][1][0][0][0][0]

    il mio obiettivo è quello di sostituire
    la struttura:
    [1][1][1]
    [1][0][1]
    [1][1][1]

    con un'altra tipo:
    [2][2][2]
    [2][0][2]
    [2][2][2]

    secondo voi, devo ammattire con una sfilza di if o ho qualche altra soluzione?
    grazie in anticipo per le risposte
    Ultima modifica di mattealex; 03-07-2014 a 16:34

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    Detta così, la risposta è: "boh".

    Come è fatto il relativo array multidimensionale? Tu parli di chiavi, ma in un array non possono esistere chiavi uguali, quindi da qui
    [2][2][2]
    [2][0][2]
    [2][2][2]

    la prima tripla e la terza non possono esistere contemporaneamente.
    Mi viene da pensare che stai usando un linguaggio improprio, spiega per bene la situazione.

  3. #3
    Mi sono espresso sicuramente male...
    per esempio poniamo di avere come array quello 8x8 sopra nell'esempio sovrastante. Io voglio vedere se è presente una sequenza di valori (prima tripla) e in caso di successo cambio i valori ottenendo come risultato l'array modificato:

    [0][0][1][0][0][0][0][0]
    [0][1][0][0][0][0][0][1]
    [0][0][0][0][0][0][0][0]
    [0][0][2][2][2][0][0][0]
    [0][0][2][0][2][0][0][0]
    [0][0][2][2][2][0][0][0]
    [0][0][0][0][0][0][0][0]
    [1][0][0][1][0][0][0][0]

    spero di essermi spiegato meglio

  4. #4
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Soggetto molto interessante.

    Prova questo. Non interamente testato.

    Codice PHP:
    <?php   
     
     
    function subArr($array$lig$col$x$y) {
       
    $arrRet = array();
      
    $ii 0
       for (
    $i=$lig;$i<=$lig+$x;$i++) {
       
    $jj 0;
       for (
    $j=$col;$j<=$y+$col;$j++) {
       
    $arrRet[$ii][$jj] = $array[$i][$j];
       
    $jj++;
      } 
    // for ($j=0;$j<=$y;$i++)
       
    $ii++;
       } 
    // for ($i=$col;$i<=$x+$col;$i++)
      
    return $arrRet;
     } 
    //  function copyArr($array, $col, $x, $y)
     
     
    function copyArr($array$lig$col$arrayToCopy$x$y) {
       
    $arrayRet $array;
      
    $ii       0
       for (
    $i=$lig;$i<=$lig+$x;$i++) {
       
    $jj 0;
       for (
    $j=$col;$j<=$y+$col;$j++) {
       
    $arrayRet[$i][$j] = $arrayToCopy[$ii][$jj];
       
    $jj++;
      } 
    // for ($j=0;$j<=$y;$i++)
       
    $ii++;
       } 
    // for ($i=$col;$i<=$x+$col;$i++)
      
    return $arrayRet;
     } 
    //  function copyArr($array, $col, $x, $y)
    function getArrayDepth($array) {
     
    $i 0;
     foreach (
    $array as $value) {
      
    $i++;
     } 
     return 
    $i;
    }
    function 
    multidim_find($biggestArray,$smallestArray) { 
     
    $rowsBA  count($biggestArray);
     
    $depthBA getArrayDepth($biggestArray[0]);
     
    $rowsSA  count($smallestArray);
     
    $depthSA getArrayDepth($smallestArray[0]); 
     
     for (
    $i=0;$i<=$rowsBA-1-$rowsSA+1;$i++) {
      for (
    $j=0;$j<=$depthBA-1-$depthSA+1;$j++) {
       if (
    $smallestArray == subArr($biggestArray,$i,$j,$rowsSA-1,$depthSA-1)) {
        return 
    true;
      } 
    // if ($smallestArray == copyArr($a,$i,$j,rowsSA-1,$depthSA-1))
      
    // for ($j=0;$j<=$depthBA-1-$depthSA+1;$j++)
     
    // for ($i=0;$i<=$rowsBA-1-$rowsSA+1;$i++)
     
    return false;
    // multidim_find($biggestArray,$smallestArray)
    function multidim_replace($biggestArray,$smallestArray,$replaceArray) { 
     
    $rowsBA  count($biggestArray);
     
    $depthBA getArrayDepth($biggestArray[0]);
     
    $rowsSA  count($smallestArray);
     
    $depthSA getArrayDepth($smallestArray[0]); 
     
     for (
    $i=0;$i<=$rowsBA-1-$rowsSA+1;$i++) {
      for (
    $j=0;$j<=$depthBA-1-$depthSA+1;$j++) {
       if (
    $smallestArray == subArr($biggestArray,$i,$j,$rowsSA-1,$depthSA-1)) {
       return 
    copyArr($biggestArray,$i,$j,$replaceArray,$rowsSA-1,$depthSA-1);
      } 
    // if ($smallestArray == copyArr($a,$i,$j,rowsSA-1,$depthSA-1))
      
    // for ($j=0;$j<=$depthBA-1-$depthSA+1;$j++)
     
    // for ($i=0;$i<=$rowsBA-1-$rowsSA+1;$i++)
     
    return false;
    // multidim_replace($biggestArray,$smallestArray,$replaceArray)
     
     
    $a[0] = array(0,0,1,0,0,0,0,0);
     
    $a[1] = array(0,1,0,0,0,0,0,1);
     
    $a[2] = array(0,0,0,0,0,0,0,0);
     
    $a[3] = array(0,0,1,1,1,0,0,0);
     
    $a[4] = array(0,0,1,0,1,0,0,0);
     
    $a[5] = array(0,0,1,1,1,0,0,0);
     
    $a[6] = array(0,0,0,0,0,0,0,0);
     
    $a[7] = array(1,0,0,1,0,0,0,0);
     
     
    $toFind[0] = array(1,1,1);
     
    $toFind[1] = array(1,0,1);
     
    $toFind[2] = array(1,1,1); 
     
     
    $toReplace[0] = array(2,2,2);
     
    $toReplace[1] = array(2,0,2);
     
    $toReplace[2] = array(2,2,2);
     
    if (
    multidim_find($a,$toFind)) {
     print 
    "Trovato";
    } else {
     print 
    "Non trovato";
    // if (multidim_find($a,$toFind))
    print "<br/>";
     
    print 
    "<strong>Prima :</strong><br/>";
    foreach (
    $a as $key => $avalue) {
     foreach (
    $avalue as $value) {
      print 
    "[$value]";
     }
     print 
    "<br/>";
    }
     
    //---- Rimpiazzamento
    $myResult multidim_replace($a,$toFind,$toReplace);
    print 
    "<strong>Dopo :</strong><br/>";
    foreach (
    $myResult as $key => $avalue) {
     foreach (
    $avalue as $value) {
      print 
    "[$value]";
     }
     print 
    "<br/>";
    }
     
    ?>
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.