Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 爆炸功能工作不正常_Php_Arrays_Codeigniter_Explode - Fatal编程技术网

Php 爆炸功能工作不正常

Php 爆炸功能工作不正常,php,arrays,codeigniter,explode,Php,Arrays,Codeigniter,Explode,我正在从正在工作的数据库中获取输出。下面的数组显示正确的输出 $get_elements = array( 'student_elements' => $row->student_elements, 'address_elements' => $row->address_elements, 'marketing_elements' => $row->marketing_elements,

我正在从正在工作的数据库中获取输出。下面的数组显示正确的输出

 $get_elements = array(
        'student_elements' => $row->student_elements, 
        'address_elements' => $row->address_elements,  
        'marketing_elements' => $row->marketing_elements, 
        'office_use_elements' => $row->office_use_elements, 
 );
获取输出

Array
(
    [student_elements] => firstname,lastname,mobileno,age,gender
    [address_elements] => building,sector,city
    [marketing_elements] => 
    [office_use_elements] => counsellername,mobile,email
)
现在我在explode函数中传递数组值

$result_elements=explode(',',$get_elements);
获取错误

Severity: Warning
Message:  explode() expects parameter 2 to be string, array given
我想在foreach中传递
$result\u元素

$results = [];
foreach ($result_elements as $value) {
    echo $sql_elements_get="SELECT fields_name, fields_type FROM `tbl_form_builder_fields` WHERE fields_name='".$value."'";
    $fetch_query = $this->db->query($sql_elements_get);
    foreach ($fetch_query->result() as $r){
        $results[] = $r;
    }
}
return $results;// I
我希望每次都运行查询,以获得来自explode函数的每个值的输出


你能帮我一下吗?

分解函数需要第二个参数作为字符串而不是数组。您必须进一步深入数组以获取字符串

$get_elements = array(
    'student_elements' => $row->student_elements, 
    'address_elements' => $row->address_elements,  
    'marketing_elements' => $row->marketing_elements, 
    'office_use_elements' => $row->office_use_elements, 
);
for($get_elements as $key=>$value){
    $value = explode(',', $value);
  //run your query here
}

看起来您正在尝试获取所有字符串中所有唯一元素的列表。正如其他人所提到的,您不能分解数组。一种循环的方法是
将数组内爆
在一起,然后
将其分解

<?php
$get_elements = array (
    'student_elements'     => 'firstname,lastname,mobileno,age,gender',
    'address_elements'     => 'building,sector,city',
    'marketing_elements'     => NULL,
    'office_use_elements'     => 'counsellername,mobile,email'
);

// Combine all strings
$get_elements = implode(',',$get_elements);

// DEBUGGING ONLY
echo $get_elements;

// Split the elements
$get_elements = explode(',', $get_elements);

// DEBUGGING ONLY
echo '<pre>'.var_export($get_elements, TRUE).'</pre>';

// YOUR CODE
$results = [];
foreach ($get_elements as $value) {
    // Ensure it's not empty
    if($value != ''){
        echo $sql_elements_get="SELECT fields_name, fields_type FROM `tbl_form_builder_fields` WHERE fields_name='".$value."'";
        $fetch_query = $this->db->query($sql_elements_get);
        foreach ($fetch_query->result() as $r){
            $results[] = $r;
        }
    }
}
return $results;

?>

不要运行那么多查询;只运行一个。最佳实践是始终尽可能减少查询数量。因为您没有用result元素区分不同的值,所以只需在
中使用
进行一次查询就可以了

SELECT fields_name, fields_type FROM `tbl_form_builder_fields` WHERE fields_name='firstname'
SELECT fields_name, fields_type FROM `tbl_form_builder_fields` WHERE fields_name='lastname'
SELECT fields_name, fields_type FROM `tbl_form_builder_fields` WHERE fields_name='mobileno'
SELECT fields_name, fields_type FROM `tbl_form_builder_fields` WHERE fields_name='age'
SELECT fields_name, fields_type FROM `tbl_form_builder_fields` WHERE fields_name='gender'
SELECT fields_name, fields_type FROM `tbl_form_builder_fields` WHERE fields_name='building'
SELECT fields_name, fields_type FROM `tbl_form_builder_fields` WHERE fields_name='sector'
SELECT fields_name, fields_type FROM `tbl_form_builder_fields` WHERE fields_name='city'
SELECT fields_name, fields_type FROM `tbl_form_builder_fields` WHERE fields_name='counsellername'
SELECT fields_name, fields_type FROM `tbl_form_builder_fields` WHERE fields_name='mobile'
SELECT fields_name, fields_type FROM `tbl_form_builder_fields` WHERE fields_name='email'
*注意,在使用逗号连接之前,我过滤掉所有空字符串,然后将所有值用单引号括起来


要强调WHERE子句中
中的
的重要性,区别如下:

如果没有
中的
(假设您过滤掉空元素),您将对数据库进行11次调用:

SELECT fields_name, fields_type FROM `tbl_form_builder_fields` WHERE fields_name IN ('firstname','lastname','mobileno','age','gender','building','sector','city','counsellername','mobile','email')
使用
中的
,您可以对数据库进行一次调用:

SELECT fields_name, fields_type FROM `tbl_form_builder_fields` WHERE fields_name IN ('firstname','lastname','mobileno','age','gender','building','sector','city','counsellername','mobile','email')

您正在将数组传递到
explode
中。你不能分解一个数组。你只能分解一根线。错误消息会告诉您同样的情况。你想分解这个:
$row->student_元素
,而不是
$get_元素
@deceze,对,但是我传递了$row->student_元素,然后我只得到firstname,lastname,mobileno,age,genderI的输出。我得到了一个语法错误,意外的“as”(T_as),期望的是“;”它的语法错误,您编写了
for
循环,而不是
foreach