/ / Multi-array avec une sortie - php, arrays

Multi-array avec une sortie - php, arrays

Voici mon code, qui actuellement ne fonctionne pas correctement. Comment puis-je le faire fonctionner? Mon souhait est de faire la sortie comme une chaîne (bien sûr, je sais "convertir" un tableau en chaîne):

mots modifiés, ajoutés et supprimés pour le rendre

Code:

<?php

header("Content-Type: text/html; charset=utf-8");
$text = explode(" ", strip_tags("words altered added and removed to make it"));
$stack = array();

$words = array("altered", "added", "something");
foreach($words as $keywords){
$check = array_search($keywords, $text);
if($check>(-1)){
$replace = " ".$text[$check].",";
$result = str_replace($text[$check], $replace, $text);
array_push($stack, $result);
}
}

print_r($stack);
?>

Sortie:

Array
(
[0] => Array
(
[0] => words
[1] =>  altered,
[2] => added
[3] => and
[4] => removed
[5] => to
[6] => make
[7] => it
)

[1] => Array
(
[0] => words
[1] => altered
[2] =>  added,
[3] => and
[4] => removed
[5] => to
[6] => make
[7] => it
)
)

Réponses:

1 pour la réponse № 1

Sans plus d'explications, c'est aussi simple que cela:

$text  = strip_tags("words altered added and removed to make it");
$words = array("altered", "added", "something");

$result = $text;
foreach($words as $word) {
$result = str_replace($word, "$word,", $result);
}
  • Ne pas "exploser votre chaîne source
  • Boucle les mots et remplace le mot par le mot et ajoute une virgule

Ou abandonner l'approche en boucle:

$text   = strip_tags("words altered added and removed to make it");
$words  = array("altered", "added", "something");

$result = preg_replace("/(".implode("|", $words).")/", "$1,", $text);
  • Créer un motif en implosant les mots sur l'opérateur d'alternance (OR) |
  • Remplacer le mot trouvé par le mot $1 et une virgule

0 pour la réponse № 2

Vous pouvez utiliser un iterator

// Array with your stuff.
$array = [];

$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($array));
foreach($iterator as $value) {
echo $v, " ";
}

0 pour la réponse № 3

Votre approche originale devrait fonctionner avec quelquesmodifications. Boucle sur les mots de la chaîne éclatée à la place. Pour chacun d'entre eux, s'il est dans le tableau de mots à modifier, ajoutez la virgule. Sinon, ne le faites pas. Alors le mot modifié (ou non) sera placé sur la pile.

$text = explode(" ", strip_tags("words altered added and removed to make it"));
$words = array("altered", "added", "something");

foreach ($text as $word) {
$stack[] = in_array($word, $words) ? "$word," : $word;
}