基于与mySQL表的正匹配来组合数组中的某些字符串

时间:2016-06-23 04:35:34

标签: php mysql arrays

我有一个由不同长度的字符串组成的多维数组,如下所示:

$a = 
Array ( [0]
   Array ( [0] AQWER, [1] CFG, [2] JUHTYREWQ, [3] K, [4] LO ),
Array   [1]
   Array ( [0] VFG, [1] yhtredw, [2] koeutydjwiq, [3] bg, [4] hytefs, [5] M),
Array   [2]
   Array ( [0] BHTWQ, [1] BH, [2] NJUy))

同样,我有一个包含以下值的mySQL表

myTable
AQWER
CFG
JUHTYREWQ_K_LO
VFG
yhtredw
bg_hytefs
BHTWQ
BH_ NJUy

期望的结果

我正在尝试根据SQL表中的匹配来测试和重新构造数组,使其看起来像这样:

$a =
Array ( [0]
   Array ( [0] AQWER, [1] CFG, [2] JUHTYREWQ_K_LO ),
Array   [1]
   Array ( [0] VFG, [1] yhtredw, [2] koeutydjwiq, [3] bg_hytefs, [5] M),
Array   [2]
   Array ( [0] BHTWQ, [1] BH_NJUy))

仍显示尚未找到的值(例如koeutydjwiq)

到目前为止我尝试过:

我帮助我操纵$a,以便能够测试1个字符串,2个字符串和3个字符串组合。

但是我的代码没有成功获取字符串组合(在数组和表中肯定存在),因此,不会重新格式化原始数组$a而且我不能完全找出原因。

事实上,更具体地说,在IF语句中调用print_r($para)时,我得到.........

这是我的代码:

foreach ($a as $val) {
        for ($i=0; $i<count($val); $i++) {
            // A_B_C
            if (isset($val[$i+2])) {
                $exagon = array();
                $exagon = $val[$i] . '_' . $val[$i+1] . '_' . $val[$i+2];

                $conn = mysqli_connect("localhost:8889","root","root","myDB");
                $query = "SELECT * FROM `myTable` WHERE LIST = '".$exagon."'";

                $para = array(
                    );

                $result = mysqli_query($conn, $query);
                //echo $result;

                while($row = mysqli_fetch_array($result)) {
                    $para[] = array($row['LIST']);
                }

                if (isset($para) && !empty($para)) {
                    print_r($para);
                    array_splice($a, $i, $i+2, $para);
                    $i=$i+2;
                }
                else {
                    unset($para);
                    unset($exagon);
                }



            }
            // A_B
            elseif (isset($val[$i+1])) {
                $exagon = array();
                $exagon =  $val[$i] . '_' . $val[$i+1];

                $conn = mysqli_connect("localhost:8889","root","root","myDB");
                $query = "SELECT * FROM `myTable` WHERE LIST = '".$exagon."'";

                $para = array(
                    );

                $result = mysqli_query($conn, $query);

                while($row = mysqli_fetch_array($result)) {
                    $para[] = array($row['LIST']);
                }

                if (isset($para) && !empty($para)) {
                    print_r($para);
                    array_splice($a, $i, $i+1, $para);
                    $i=$i+1;
                }
                else {
                    unset($para);
                }

            }
            // A
            else {
                echo $val[$i];
            }
        }
}

不可否认,通过研究,我找到了帖子和手册来指导我使用array_splice并在SQL查询中调用变量,但很可能在此代码中存在多个错误

1 个答案:

答案 0 :(得分:1)

请使用以下代码。这些动态数组也可以用你的数组数据检查它是否正常工作

$conn = mysqli_connect("localhost:8889","root","root","myDB");
//These will create commbination
$finalArray = array();
$sampleArray = array(array('AQWER','CFG','JUHTYREWQ','K','LO'),array('mno','xxy','kkl'));
foreach($sampleArray as $key=>$val){
    $combincationArr = array();
    foreach($val as $k1=>$v1){

        $combincationArr[] = $v1;
        $prevStr = $v1;
        for ($i=($k1+1); $i<(count($val)); $i++) {
            $prevStr .= '_'.$val[$i];
            $combincationArr[] = $prevStr;
        }

    }
    if(!empty($combincationArr)){
           $finalArray[$key] = $combincationArr;
    }
}
$destArr = array();
foreach($finalArray as $key=>$val){
    if(!empty($val)){
    $para = array();
    $query = "SELECT * FROM `myTable` WHERE FIND_IN_SET (LIST,'".  implode(',', $val)."')";
    $result = mysqli_query($conn, $query);
    while($row = mysqli_fetch_array($result)) {
        $para[] = array($row['LIST']);
    }

    $destArr[] = $para;
    }
}
echo "<pre>";print_r($destArr);die;