【问题标题】:PHP convert array of unique items into complex like query stringsPHP将唯一项数组转换为复杂的查询字符串
【发布时间】:2016-12-04 13:39:53
【问题描述】:

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

$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%'",
];

【问题讨论】:

    标签: php arrays


    【解决方案1】:

    来了

        <?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"
    ]));
    

    【讨论】:

    • 这行得通,但如果只有两个值 [NULL, 'red'] 例如,它会中断?
    猜你喜欢
    • 2015-09-17
    • 1970-01-01
    • 2013-07-11
    • 1970-01-01
    • 2012-01-10
    • 2017-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多