Compte tenu de votre chaîne, vous pouvez le modifier de manière simple avec array_map
$string="John Smith - Clearner - 1234$Bob Dillan - IT Man - 2453242$Sarah Clifford - Admin - 32423423"
Si foreach est trop difficile à saisir, que vous devez modifier le tableau que vous déplacement, essayez l'approche fonctionnelle , peut-être que cela vous simplifiera la tâche.
explode
, comme vous le savez créer un tableau divisant la chaîne d'entrée avec un séparateur:
$partial= explode("$", $string);
se traduira par
$partial= [
"John Smith - Clearner - 1234",
"Bob Dillan - IT Man - 245324",
"Sarah Clifford - Admin - 32423423"
];
vous pouvez appliquer la même transformation à chaque élément d'un tableau avec array_map
. La transformation est codée dans une fonction d'assistance:
function detail_splitter($string) {
return explode(" - ", $string)
}
qui peut être mis à profit en tant
$result =array_map(detail_splitter, $partial);
et le résultat sera le suivant:
$result = [
["John Smith", "Clearner", "1234"],
["Bob Dillan", "IT Man", "245324"],
["Sarah Clifford", "Admin", "32423423"]
];
qui est un tableau de matrice. Chaque élément du tableau est traité par la fonction d'assistance et divisé en un tableau à trois éléments. Le résultat est utilisé pour créer un nouveau tableau avec les valeurs traitées prêtes à être traitées.
Évidemment, vous pouvez combiner les étapes en une seule instruction:
$result = array_map(
function ($p) { return explode(" - ", $p); },
explode("$", $string);
);
Depuis maintenant, vous ne devez pas transformer le tableau plus loin, mais une tâche pour chaque élément de tableau, vous pouvez revenir à foreach. Notez que j'ai changé le nom du paramètre de $string
à $p
pour éviter de perturber la portée (pour php, tout ira bien, les programmeurs humains ne sont parfois pas à l'aise avec les noms de variable d'observation).
Il y a une fonction, array_walk
pour effectuer une tâche sur tous les éléments d'un tableau, mais je pense que cette tâche serait plus facile à l'aide d'un foreach
simple.
Vous pouvez adresser les différentes personnes de telle manière:
// $dbc is your db connection
$sql = "INSERT INTO yourtable VALUES (?,?,?);
foreach($result as $person) {
$stmt = $dbc->prepare($sql);
$stmt->bind_param('s', $person[0]);
$stmt->bind_param('s', $person[1]);
$stmt->bind_param('s', $person[2]);
$stmt->execute();
}
J'ai fait une hypothèse avec votre instruction SQL, mais MySQL utilise hors de la portée de cette question, je suppose.
Avez-vous un code que vous pouvez partager ce que vous avez essayé jusqu'à présent? – Optimae
Vous devez freiner votre chaîne et après cela | pour diffrence – sunil
double possible de [Double exploser un tableau] (http://stackoverflow.com/questions/16576545/double-explode-an-array) –