2016-12-04 2 views
0

私は以下のフォーマットのデータを含むphp配列を持っています。ユニークな値が存在し、の1つのNULL値が存在する可能性があります。これは、他の値と一致するように負の値を必要とします。PHPはユニークなアイテムの配列を複雑なクエリ文字列に変換します

$colors = array_unique([ 
    NULL, 
    "red", 
    "black" 
]); 

私は次のように変換したい:

$converted = [ 
    "NOT LIKE '%red%' AND NOT LIKE '%black%'", 
    "LIKE '%red%' AND NOT LIKE '%black%'", 
    "LIKE '%black%' AND NOT LIKE '%red%'" 
]; 

どのように私はこれを達成することができますか?

私はphpでこれを達成する方法について私の頭を得ることができません、私は配列とforeachループのさまざまな組み合わせを試しましたが、最初の$colour配列が値を展開することができますが、 (同じ構造の拡張データの例2を参照)。

例ここでは2

$colors = array_unique([ 
    NULL, 
    "red", 
    "black", 
    "purple", 
    "orange" 
]); 


$converted = [ 
    "NOT LIKE '%red%' AND NOT LIKE '%black%' AND NOT LIKE '%purple%' AND NOT LIKE '%orange%'", 
    "LIKE '%red%' AND NOT LIKE '%black%' AND NOT LIKE '%purple%' AND NOT LIKE '%orange%'", 
    "LIKE '%black%' AND NOT LIKE '%purple%' AND NOT LIKE '%orange%' AND NOT LIKE '%red%'", 
    "LIKE '%purple%' AND NOT LIKE '%orange%' AND NOT LIKE '%red%' AND NOT LIKE '%black%'", 
    "LIKE '%orange%' AND NOT LIKE '%red%' AND NOT LIKE '%black%' AND NOT LIKE '%purple%'", 
]; 

答えて

2

は、あなたがたは、作品

<?php 

function my_array_unique_query($values){ 
    $copy = $values; 
    $query = array(); 

    foreach($values as $a){ 
     $copy = remove_null_and_like($values, $a); 
     $q = ""; 
     if(!empty($a) && !is_null($a)){ 
      $q .= "LIKE %".$a."%'"; 
     }else{ 
      $q .= "NOT LIKE ".array_pop($copy); 
     } 
     if(count($copy) > 0){ 
      $q .= "AND NOT LIKE '".implode(' AND NOT LIKE ', $copy); 
     } 

     $query[] = $q; 
    } 
    return $query; 
} 

function remove_null_and_like($values, $like){ 
    $return = array(); 
    foreach($values as $a){ 
     if(!empty($a) && !is_null($a) && $a != $like){ 
      $return[] = "%".$a."%"; 
     } 
    } 
    return $return; 
} 

print_r(my_array_unique_query([ 
    NULL, 
    "red", 
    "black" 
])); 

print_r(my_array_unique_query([ 
    NULL, 
    "red", 
    "black", 
    "purple", 
    "orange" 
])); 

print_r(my_array_unique_query([ 
    NULL, 
    "red" 
])); 
+0

に行くだけで2つの値を 'があるかどうそれが壊れる[NULL、 '赤']例えば? – Dan

+0

これを処理するコードも更新しました。 –

関連する問題