2012-03-27 68 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