2017-04-22 2 views
1

Donc ma question pourrait ne pas être la meilleure, donc désolé pour cela.
J'ai un tableau avec des chaînes et je veux écrire un texte à l'aide d'un autre tableau en l'utilisant comme ordre/clé. Ceci est l'entrée:Comment "écrire" avec les chaînes d'un tableau un texte?

$words =["I","am","cool"]; 
$order =["2","0","1","0","1","2"]; 
//var_export($words); 
// array (
//  0 => 'I', 
//  1 => 'am', 
//  2 => 'cool', 
//) 

Je veux utiliser $ pour comme une sorte de clé pour réorganiser $ mots pour que je puisse obtenir cette sortie:

"Cool I am I am cool" 

aide est très appréciée, merci :)

Répondre

1

Utilisez les valeurs de $order comme les clés pour $words.

$words =["I","am","cool"]; 
$order =["2","0","1","0","1","2"]; 
$output = ''; 
foreach($order as $key) { 
    $output .= $words[$key] . ' '; 
} 
echo ucfirst(trim($output)); 

Démo: https://eval.in/780785

Le empty($real_key) est de vérifier si elle est la première itération. Peut également être == 0.

+0

Une question. Quand j'exécute le code, j'obtiens une erreur qui indique que chaque nombre de ma commande $ est indéfini (index undefined: 1). Ma commande $ est créée avec $ order = explode ("\ n", $ string); Chaque nombre est un paragraphe dans la chaîne. Pourquoi ça ne marche pas? Merci quand même pour votre solution :) – staffblast

+0

Vous avez peut-être des espaces? Utiliser 'trim' devrait le réparer, https://eval.in/780816. – chris85

+0

Ouais, maintenant ça marche. Merci beaucoup!!! Passez une bonne journée :) – staffblast

0

Commencez avec un tableau vide. Parcourez ensuite le tableau de commande et ajoutez la partie de tableau de mots à la nouvelle chaîne.

$my_string= array(); 

    foreach ($order as $index) { 
     $index = int($index); 
     $my_string[] = (isset($words[ $index])) ? $words[ $index ] : ''); 
    } 

$my_string = implode(' ', $my_string); 
echo my_string; 
0

Itérer sur commande et utiliser ses valeurs comme clés de mots; Convertir le code suivant pour php il devrait être assez simple ...

foreach (string orderIndexString in order) { 
    int orderIndexInt = System.Convert.ToInt16(orderIndexString); // convert string to int 
    if(orderIndexInt < 0 || orderIndexInt >= words.Length) 
     continue; 

    print (words[orderIndexInt]); // either print or add it to another string 
    } 
1

Je recommande l'utilisation de array_map et join

Il n'y a pas besoin de

  • côté effectuer itération manuelle en utilisant foreach
  • if instructions ou expressions ternaires (?:)
  • réaffectation variables
  • concaténation de chaînes
  • utilisant .
  • tableau de vérification longueurs

Ici, nous allons

function map_indexes_to_words ($indexes, $words) { 
    $lookup = function ($i) use ($words) { 
    return $words[(int) $i]; 
    }; 
    return join(' ', array_map($lookup, $indexes)); 
} 

$words = ["I","am","cool"]; 
$order = ["2","0","1","0","1","2"]; 

echo map_indexes_to_words($order, $words); 
// 'cool I am I am cool'