2012-03-27 13 views
1

heren die Situation i in der Datenbank einen Eintrag habe, wo die Feldwerte wie untenpassende unähnlich Strings in PHP

  • 64 gegeben sind | 65 | 0 | 0 | 72 | 0 | 0 |
  • 61 | 65 | 0 | 0 | 72 | 0 | 0 |

und im Frontend bekomme ich eine Zeichenfolge wie 64 | 65 | 72 | 0 | 0 | 0 | 0 | (Bitte beachten Sie, dass der Eintrag dem Feld 1 ähnelt, aber neu angeordnet ist). basierend auf den vom Benutzer eingegebenen Optionen (bitte beachten Sie, dass die Stringlänge gleich bleibt).

ist es möglich, das Benutzerfeld mit dem Datenbankfeld zu, um die Daten aus der Datenbank für den angepassten Feld

+0

die Zeichenfolge aufgeteilt und für jede mögliche Kombination suchen - das ist Ihre Schmerzen für mehrere Werte in einem einzigen Datenbankfeld kombiniert – ManseUK

+0

uns Zeigen Sie, was Sie bisher versucht haben ... –

Antwort

2

zu bekommen Wenn Sie die Zeichenfolge explodieren Sie einen Array haben werden, die Sie sortieren.

Aber das ist nutzlos, wenn die Daten in der Datenbank auch sortiert sind.

z.B. $my_array = explode("|", trim($str, "|"));

+0

gibt es keine andere Möglichkeit, die Datenbank, da das Sortieren Feld ist keine Option für mich –

+0

Danke Josh. @OP - wie viele Datensätze gibt es? Vielleicht könnten Sie ein kurzes Skript schreiben, um dieses Feld erneut einzugeben? – Pete

+0

gut gibt es 5000+ records –

0
function rearrange($string) 
{ 
    $temp = explode("|", $string); 
    // $temp is now an array. sort it however you want and store it back in $temp 
    return implode("|", $temp); 
} 
0

Ich bin mir nicht ganz sicher, was die Nachbestellung Regeln sind, aber lassen Sie uns die Lösung mit der Form ABCDEFG illustrieren -> ABDECFG.

Sie können die Daten entweder in Javascript neu ordnen, bevor Sie sie an den Server zurücksenden, oder auf dem Server neu ordnen, bevor Sie die Daten an MySQL senden. Da Ihre Frage unter PHP/MySQL abgelegt ist, gehe ich davon aus, dass Sie die letztere durchführen möchten.

Bitte beachten Sie, dass dies nicht die eleganteste Lösung ist, aber es zeigt den Ansatz deutlich. Sie können es polieren, wenn Sie die zugrunde liegende Idee verstehen:

// Assume $Unsorted = '64|65|0|0|72|0|0|' 
$Segments = explode('|', $Unsorted); 
if (count($Segments) != 7) 
{ 
    // Handle the error case 
} 

$Sorted = sprintf 
(
    '%u|%u|%u|%u|%u|%u|%u|', 
    $Unsorted[0], 
    $Unsorted[1], 
    $Unsorted[3], 
    $Unsorted[4], 
    $Unsorted[2], 
    $Unsorted[5], 
    $Unsorted[6] 
); 

// Now, $Sorted = '64|65|0|0|72|0|0|' 
+0

gut mein eingang ist eine kombination von benutzereingaben und kann ändern so nicht sicher, wie ich kann ihre lösung implementieren, aber werde versuchen und zu dir zurück –

0

ich wie andere sagen würde: in Array Zeichenfolge Split, dann vergleichen Sie es

$myInput = explode('|', $strInput); 
$similar = (true === empty(array_diff($myInput, $data)) 
     && true === empty(array_diff($data, $myInput))); 

Correction (leer nur Variablen akzeptiert)

+0

gut ich habe es versucht, aber es gibt mir ein fatal Fehler –

+0

Oh ja, natürlich! Mein Fehler! Leer akzeptieren nur Variablen! (Ich habe es geschrieben, ohne es zu testen). Ich bearbeite meinen Beitrag – Guile

0

Teilen Sie die Eingabe- und Datenbankzeichenfolge nach Pipe und sortieren Sie sie, bevor Sie die resultierenden Arrays vergleichen:

$arr1 = explode('|', '64|65|0|0|72|0|0|'); 
$arr2 = explode('|', '64|65|72|0|0|0|0|'); 
sort($arr1); 
sort($arr2); 
if ($arr1 === $arr2) 
    echo "Matched\n"; 
else 
    echo "Not Matched\n"; 
+0

danke anubhava werde es versuchen und zu dir zurückkommen –