2017-10-12 142 views
-1

我正在從正在工作的數據庫獲取輸出。在數組下方顯示正確的輸出。爆炸功能無法正常工作

$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 
) 

現在我通過數組值在爆炸功能

$result_elements=explode(',',$get_elements); 

得到錯誤

Severity: Warning 
Message: explode() expects parameter 2 to be string, array given 

我想通過$result_elements中的foreach

$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 

我想每次運行查詢以獲取每個來自爆炸函數的值的輸出。

你能幫我解決嗎?

+1

您正在將一個數組傳遞給'explode'。你不能爆炸一個數組。你只能爆炸一個字符串。錯誤信息告訴你很多。你想'爆炸'這個:'$ row-> student_elements',而不是'$ get_elements'。 – deceze

+0

@deceze,對,但我傳遞$ row-> student_elements,然後我得到輸出只有名字,姓氏,移動,年齡,性別 –

回答

1

它看起來像你試圖讓所有的字符串的所有獨特元素的列表。正如其他人所說,你不能explode一個數組。一種方式,你可以通過這個循環來將implode排列在一起,然後explode它。

<?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; 

?> 

A Codepad鏈接代碼輸出(刪除數據庫調用)。

0

爆炸函數需要第二個參數作爲字符串而不是數組。你必須進一步深入你的陣列獲取字符串

$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 
} 
+0

我得到了一個錯誤,語法錯誤,意想不到'(T_AS),期待' ;」 –

+0

它的語法錯誤,你寫了'for'循環而不是'foreach' –

1

不要運行這麼多的查詢;只運行一個。最佳做法是始終儘可能降低查詢次數。由於您不區分結果元素的不同值,因此僅使用IN的一個查詢將會很有效。 *注意,在用逗號加入之前,我會過濾掉所有空串,然後用單引號將所有值包裹起來。


要強調的WHERE子句中IN的重要性,這裏的區別是:

沒有IN(假設你過濾掉空元素)你讓11個調用數據庫:

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' 

隨着IN你做1個調用數據庫:

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')