代码之家  ›  专栏  ›  技术社区  ›  YVS1102

将数组转换为查询php

  •  0
  • YVS1102  · 技术社区  · 8 年前

    所以,我有这个

    Array
    (
        [ModuleCode] => Array
            (
                [0] => MD001
                [1] => MD002
                [2] => MD004
                [3] => MD005
            )
    
        [MD001] => Array
            (
                [insert] => on
                [edit] => on
                [delete] => on
            )
    
        [MD002] => Array
            (
                [insert] => on
                [edit] => on
                [delete] => on
            )
    
        [MD005] => Array
            (
                [insert] => on
                [edit] => on
                [delete] => on
                [access_edit] => on
            )
    
    )
    

    如您所见,有一个数组 ModuleCode 作为关键。 试了一下我就能拿到这个

    MD001
    insert => 1
    edit => 1
    delete => 1
    access_edit => 0 
    
    MD002
    insert => 1
    edit => 1
    delete => 1
    access_edit => 0
    
    MD004
    insert => 0
    edit => 0
    delete => 0
    access_edit => 0
    
    MD005
    insert => 1
    edit => 1
    delete => 1
    access_edit => 1
    

    用这个剧本

    $dataModul = $this->input->post('ModuleCode');
            $field = array ("insert","edit","delete","access_edit");
            for($x=0;$x<count($dataModul);$x++){
                echo "<pre>".$dataModul[$x] . "<br>";
                    for($a=0;$a<count($field);$a++){
                        $subcheck = (isset($this->input->post($dataModul[$x])[$field[$a]])) ? 1 : 0;
                        echo $field[$a]. " => " . $subcheck . "<br>" ;
                    }
                echo "<pre>";
            }
    

    好吧,这就是我想要达到的目标。从这个部分(例如)

     MD001
     insert => 1
     edit => 1
     delete => 1
     access_edit => 0 
    

    我想做这样的东西

    Update TableName set insert = 1, edit = 1, delete = 1 , access_edit = 0 where ModuleCode = 'MD001'
    

    我怎样才能做到这一点?提前谢谢

    2 回复  |  直到 8 年前
        1
  •  0
  •   Paul Janubas    8 年前

    您可以尝试以下代码:

    您可以调用use the function as echo generate_query_string('MD004', $modules); 其中第一个参数是模块代码,第二个是整个数组。

    <?php
    
    function generate_query_string( $module, $module_arr ) {
    
        if( !isset( $module_arr[$module] ) ) { return false; } // return false if module does not exist
    
        // set default values
        $defaults = array(
            'insert' => 0,
            'edit' => 0,
            'delete' => 0,
            'access_edit' => 0
        );
    
        $settings = array_merge( $defaults, $module_arr[$module] ); // merge default values and the actual values
        $settings = array_filter( $settings );  // remove items with 0 value since we don't need to include them on the query string
    
        // render the query string values
        $values = [];   
        foreach ($settings as $key => $value) {
            $value = ( $value == 'on' )? 1 : 0;
            $values[] = $key. ' = '. $value;
        }
        $values = implode(', ', $values); 
    
        return 'Update TableName set '. $values .' where ModuleCode = '. $module;
    }
    
    ?>
    
        2
  •  0
  •   YVS1102    8 年前

    我找到了溶剂。我就是这么做的

    第一。我添加了一个自定义函数(ref: https://stackoverflow.com/a/42052020/6354277 )

        function custom_function($input_array)
            {
                $output_array = array();
                for ($i = 0; $i < count($input_array); $i++) {
                    for ($j = 0; $j < count($input_array[$i]); $j++) {
                        $output_array[key($input_array[$i])] = $input_array[$i][key($input_array[$i])];
                    }
                }
                return $output_array; 
    }
    

    然后我把代码改成这个。

    function updateaccess(){
        $dataModul = $this->input->post('ModuleCode');
        $field = array ("insert","edit","delete","access_edit");
        for($x=0;$x<count($dataModul);$x++){
                for($a=0;$a<count($field);$a++){
                    $subcheck[$a] = (isset($this->input->post($dataModul[$x])[$field[$a]])) ? 1 : 0;
                    $mynewarray[$dataModul[$x]][] = array($field[$a] => $subcheck[$a]);
                }
    
            foreach ($mynewarray as $key => $value) {
                      $forSave[$dataModul[$x]] = $this->custom_function($value);
            }
        }
    
        foreach ($forSave as $key2 => $values2) {
                $this->mainmodel->updateRow(array("ModuleCode" => $key2),"user_modules", $values2 );
        }
    }
    
    推荐文章