2012-03-27 14 views
1

繼承人的情況我在我的數據庫中的條目,其中所述字段的值是像下面給出匹配在PHP異種串

  • 64 | 65 | 0 | 0 | 72 | 0 | 0 |
  • 61 | 65 | 0 | 0 | 72 | 0 | 0 |

而在前端,我得到一個像64 | 65 | 72 | 0 | 0 | 0 | 0 | (請參閱條目類似於1字段但重新排列)。根據用戶輸入的選項(請注意字符串長度將保持不變)。

是可以等同於數據庫字段的用戶領域,從而從數據庫中獲取數據的匹配場

+0

分割字符串,並搜索每一個可能的組合 - 這就是你的痛苦在一個單一的數據庫字段的多個值相結合 – ManseUK 2012-03-27 15:22:42

+0

我們展示你已經嘗試到現在爲止什麼... – 2012-03-27 15:23:21

回答

2

如果你爆你有一個數組,你可以排序的字符串。

但是,除非數據庫中的數據也被排序,否則這是沒有用的。

例如$my_array = explode("|", trim($str, "|"));

+0

是沒有別的辦法,因爲排序數據庫字段不是我的選擇 – 2012-03-27 15:28:38

+0

謝謝喬希。 @OP - 有多少條記錄?也許你可以寫一個簡短的腳本來重新進入該領域? – Pete 2012-03-27 15:33:11

+0

以及有5000多條記錄 – 2012-03-27 15:46:06

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

我不完全知道什麼是重新排序規則,但讓我們說明與形式ABCDEFG解決方案 - > ABDECFG。

在將數據發送回服務器之前,您可以重新排序JavaScript中的數據,也可以在將數據發送到MySQL之前在服務器上重新排序。由於你的問題是在PHP/MySQL下提交的,我假設你想執行後者。

請注意,這不是最優雅的解決方案,但它清楚地說明了方法。你可以把它擦亮,一旦你瞭解的基本思想:

// 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

以及我的輸入是用戶輸入的組合,可以改變,所以不知道我怎麼能實現你的解決方案,但會盡力回覆你 – 2012-03-27 16:00:43

0

我會說其他人一樣: 分裂您的字符串轉換成數組,然後比較其

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

校正(空只接受變量)

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

好吧,我嘗試了這樣做,但它給了我一個致命的錯誤 – 2012-03-27 15:57:06

+0

噢,當然!我的錯!空只接受變量! (我沒有測試它就寫了它)。我編輯我的文章 – Guile 2012-03-27 15:58:35

0

通過管道分割輸入和數據庫字符串並對它們進行排序,然後比較像這樣的結果數組:

$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

謝謝anubhava會嘗試並找回你 – 2012-03-27 16:03:55