2017-03-21 2 views
0

J'ai trouvé ce code dans un autre article que j'ai trouvé très utile mais pour moi c'est la moitié de l'équation. en ligne avec le code suivant, j'ai besoin de prendre la chaîne d'une base de données, l'exploser dans le tableau 2d, éditer les valeurs dans le tableau et l'imploser en arrière prêt pour le stockage dans le même format. si spécifiquement en arrière dans le même ordre que le script existant.PHP exploser et l'assigner à un tableau multidimensionnel MKII :)

Est-ce que l'un de vos assistants peut m'aider s'il vous plaît? :) Je vous remercie!

le code de l'autre poste >>

$data = "i love funny movies \n i love stackoverflow dot com \n i like rock song"; 
$data = explode(" \n ", $data); 

$out = array(); 
$step = 0; 
$last = count($data); 
$last--; 

foreach($data as $key=>$item){ 

    foreach(explode(' ',$item) as $value){ 
    $out[$key][$step++] = $value; 
    } 

    if ($key!=$last){ 
    $out[$key][$step++] = ' '; // not inserting last "space" 
    } 

} 

print '<pre>'; 
print_r($out); 
print '</pre>'; 
+0

Alors qu'avez-vous essayé? Aussi: pourquoi voulez-vous stocker des espaces simples par intermittence dans votre tableau * $ out *? Comment est-ce utile? – trincot

+1

Quel est le résultat final que vous voulez, étant donné l'entrée de 'j'aime les films drôles \ n j'aime stackoverflow dot com \ n j'aime la chanson rock'? – AbraCadaver

+0

Pour insérer le dernier espace, vous devez commenter/supprimer $ last--; –

Répondre

0

Le code cité insère des éléments de tableau séparés qui ont juste un espace en tant que valeur. On peut se demander quel avantage cela apporte.

Voici deux fonctions que vous pouvez utiliser:

function explode2D($row_delim, $col_delim, $str) { 
    return array_map(function ($line) use ($col_delim) { 
     return explode($col_delim, $line); 
    }, explode($row_delim, $str)); 
} 

function implode2D($row_delim, $col_delim, $arr) { 
    return implode($row_delim, 
     array_map(function ($row) use ($col_delim) { 
      return implode($col_delim, $row); 
     }, $arr)); 
} 

Ils sont l'autre de face, et beaucoup de travail comme la norme exploser et implode fonctions, sauf que vous devez spécifier deux délimiteurs: un pour délimiter les lignes, et un autre pour les colonnes.

Voici comment vous l'utiliser:

$data = "i love funny movies \n i love stackoverflow dot com \n i like rock song"; 

$arr = explode2D(" \n ", " ", $data); 

// manipulate data 
// ... 
$arr[0][2] = "scary"; 
$arr[2][2] = "balad"; 

// convert back 

$str = implode2D(" \n ", " ", $arr); 

Voir courir sur repl.it.

+0

cet homme est un expert, sacrément bon travail monsieur. puis-je demander comment vous pourriez utiliser un délimiteur inhabituel i.e, Þ ou ¶ pour être stocké dans une base de données mysql? –

+0

Pour permettre toutes sortes de caractères dans votre base de données mysql, voir [ce Q & A] (http://stackoverflow.com/q/279170/5459839): il y a plusieurs choses à vérifier et peut-être faire. – trincot

+0

merci beaucoup en effet –