PHP将唯一项的数组转换为复杂的查询字符串

时间:2016-12-04 13:39:54

标签: php arrays

我有一个包含以下格式数据的php数组。可能只有唯一值和一个NULL值,这需要与其他值匹配的负值。

flag

我想将其转换为以下内容:

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

我怎样才能做到这一点?

我无法理解如何在php中实现这一点,我尝试了不同的foreach循环与数组的组合,但我不能动态地这样做,以便第一个$converted = [ "NOT LIKE '%red%' AND NOT LIKE '%black%'", "LIKE '%red%' AND NOT LIKE '%black%'", "LIKE '%black%' AND NOT LIKE '%red%'" ]; 数组可以扩展值,但它保持不变相同的原则(见同一结构中扩展数据的例子2)。

示例2

$colour


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

1 个答案:

答案 0 :(得分: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"
]));