【问题标题】:Convert array to query php将数组转换为查询php
【发布时间】:2018-08-06 02:38:32
【问题描述】:

所以,我有这个

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'

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

【问题讨论】:

  • 对不起,但你的问题很不清楚.. 将数组转换为 jquery php??你的意思是将数组从php转换为json?
  • @PaulJanubas 我的错,我已经编辑了我的问题。我希望你能明白。

标签: php arrays codeigniter


【解决方案1】:

你可以试试这个代码:

您可以将函数调用为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;
}

?>

【讨论】:

  • 谢谢,但$modules 的示例值是什么?
  • 嘿抱歉,$module 值将是示例:MD005 和 module_arr 将是整个数组
【解决方案2】:

我找到了解决方案。这就是我的工作

首先。我添加了一个自定义函数(参考: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 );
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-24
    • 2015-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多