2017-10-12 14 views
-1

Je reçois la sortie de la base de données qui fonctionne. Au-dessous du tableau affichant la sortie appropriée.La fonction Explode ne fonctionne pas correctement

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

Mise en sortie

Array 
(
    [student_elements] => firstname,lastname,mobileno,age,gender 
    [address_elements] => building,sector,city 
    [marketing_elements] => 
    [office_use_elements] => counsellername,mobile,email 
) 

Maintenant, je passe la valeur de tableau dans exploser la fonction

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

Obtenir erreur

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

Je veux passer le $result_elements dans foreachJe souhaite exécuter la requête à chaque fois pour obtenir la sortie de chaque valeur provenant de la fonction d'éclatement.

Pourriez-vous m'aider?

+1

Vous passez un tableau dans 'explode'. Vous ne pouvez pas faire exploser un tableau. Vous ne pouvez qu'exploser une chaîne. Le message d'erreur vous en dit autant. Vous voulez "exploser" ceci: '$ row-> student_elements', pas' $ get_elements'. – deceze

+0

@deceze, droit, mais je passe le $ row-> student_elements alors je reçois la sortie seulement prénom, nom, mobileno, âge, sexe –

Répondre

1

On dirait que vous essayez d'obtenir une liste de tous les éléments uniques dans toutes les chaînes. Comme d'autres l'ont mentionné, vous ne pouvez pas explode un tableau. Une façon dont vous pourriez faire une boucle à travers ce serait implode le tableau ensemble, puis explode il.

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

?> 

Un lien Codepad pour la sortie de votre code (suppression des appels de base de données).

0

Les fonctions d'éclatement nécessitent des seconds paramètres en tant que chaîne et non en tant que tableau. Vous devez percer plus votre tableau pour obtenir la chaîne

$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

J'ai eu une erreur que l'erreur de syntaxe, inattendue 'as' (T_AS), attend ' " –

+0

Son erreur de syntaxe, vous avez écrit 'for' boucle au lieu de' foreach' –

1

Ne pas exécuter autant de requêtes; il suffit de courir un. La meilleure pratique consiste à toujours réduire le nombre de requêtes le plus bas possible. Parce que vous ne faites pas de distinction entre les différentes valeurs avec les éléments de résultat, une seule requête utilisant IN sera efficace. * Note, je filtre toutes les chaînes vides avant de joindre une virgule, puis encapsule toutes les valeurs entre guillemets simples.


Pour souligner l'importance de IN dans la clause WHERE, voici la différence:

Sans IN (en supposant que vous filtrez les éléments vides) vous faites 11 appels à la base de données:

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' 

Avec IN vous faites 1 appel à la base de données:

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