2011-10-31 6 views
0

Je suis en train de pirater Expression Engine pour activer l'utilisation de types de champs personnalisés multiselect, radio et checkbox dans le formulaire de profil des membres.PHP implémenter un tableau dans un tableau

Le modèle qui analyse le formulaire et valide la requête de mise à jour soumet toutes les valeurs du formulaire dans une variable de tableau - '$ data'. L'une des valeurs de tableau dans les données de $ est un autre tableau provenant d'un type de champ multiselect - donc lorsque la requête est soumise, elle renvoie une erreur ...

Unknown column 'Array' in 'field list' 
UPDATE `apcims_member_data` SET `m_field_id_1` = '', `m_field_id_2` = Array WHERE `member_id` = '2' 

donc j'ai besoin de faire imploser les tableaux dans le tableau de données $ avant que le SQL soit exécuté.

Y at-il une fonction quelque chose comme ...

foreach($data AS $value) { 
if($value(is_array)) { $value = implode("|", $value); } 
} 

... réinsérez à l'index d'origine ou de position?

Toute aide appréciée.

Répondre

1

Vous étiez assez proche. La méthode que vous cherchez est is_array. En outre, foreach, peut vous donner l'index ainsi que la valeur afin que vous puissiez mettre à jour la valeur dans le tableau vous-même.

<?php 
$data =array('a' => array(1,2,3), 'c' => array(4,5,6)); 
foreach($data AS $key => $value) { 
if(is_array($value)) 
{ 
    $data[ $key ] = implode("|", $value); 
} 
} 
var_dump($data); 
?> 
1

Il est préférable pour une utilisation nouvelle fonction de mappage avec fonction anonyme (depuis PHP 5,3)

<?php 

$data = array('a' => array(1, 2, 3), 'b' => 9, 'c' => array(4, 5, 6)); 

$data = array_map(function($value) { 
    return is_array($value) ? implode('|', $value) : $value; 
}, $data); 

var_dump($data); 

?>