Avatar
Patrik Čelko:

Ahoj mal by som otázku, ako rozdeliť text v premennej na jednotlive premene po slovách.

Mám na mysli napríklad vetu v premennej ktorú chcem rozdeliť na slová do premenných (viď. dole): $text = "nejaká náhodná 99 správa";

Niečo čo to rozdelí do jednotlivých premenných... a vide s toho toto keď dám echo niečo takéto: (pripadne to v tých premenných aby bolo možne ponechať)

echo $slovo1; -> napíše "nejaká"
echo $slovo2; -> napíše "náhodná"
echo $slovo3; -> napíše "99"
echo $slovo4; -> napíše "správa"

Potrebujem to na to aby som mohol s akéhokoľvek textu vedel vyberať dáta (slová) a používať ich...

Vopred ďakujem za odpoveď.

 
Odpovědět 17.8.2015 18:31
Avatar
Fredep
Redaktor
Avatar
Odpovídá na Patrik Čelko
Fredep:

Ahoj, vstupní řetězec nejprve rozdělíš na jednotlivá slova a uložíš je do pole, poté hodnoty z tohoto pole uložíš do proměnných.

$pole = explode($text, " "); // Rozdělíme podle mezer
list($slovo1, $slovo2, $slovo3, $slovo4) = $pole; // Pomocí konstrukce list uložíme do proměnných hodnoty z pole

Na jednom řádku by to vypadalo takto

list($slovo1, $slovo2, $slovo3, $slovo4) = explode($text, " ");

Doporučuji ti, abys raději pracoval s poli (array) a nikoli s číslovanými proměnnými, viz http://www.itnetwork.cz/…ovani-a-pole

Nahoru Odpovědět  +3 17.8.2015 18:40
Týmová práce je důležitá proto, aby bylo možno obvinit z neúspěchu někoho jiného.
Avatar
Odpovídá na Patrik Čelko
Dominik Klapuch:

Rada od Fredep je dobrá, ale pokud chceš něco univerzálního na jakoukoliv velikost, zkus tohle:

<?php

$text = 'ahoj jak se mas';
$words = explode(' ', $text);
$variables = (array)array_reduce(range(1, count($words)), function($previous, $number) {
    $previous[] = sprintf('slovo%d', $number);
    return $previous;
});

for($i = 0; $i < count($variables); $i++)
    $$variables[$i] = $words[$i];

echo $slovo1;
echo $slovo2;
echo $slovo3;
echo $slovo4;
//vypíše ahojjaksemas
Nahoru Odpovědět 17.8.2015 18:58
Kód a data patří k sobě.
Avatar
Fredep
Redaktor
Avatar
Odpovídá na Fredep
Fredep:

Omlouvám se, popletl jsem pořadí parametrů ve funkci explode. Správně to má být

list($slovo1, $slovo2, $slovo3, $slovo4) = explode(" ", $text);

Ještě bych se rád vrátil k těm polím. Jedná se o seznam různých věcí (ve tvém případě by to byly řetězce - texty), ke kterému přistupuješ pomocí jedné proměnné. PHP obsahuje funkce, které ti umožní tyto seznamy procházet a zpracovávat jednotlivé položky. Tvůj program by tedy nebyl citlivý na počet slov a byl by i kratší. Uvedu příklad.

$slova = explode(" ", $text); // Pole (seznam) se slovy

echo "První slovo je " . $slova[0];
echo "Páté slovo je " . $slova[4];

foreach ($slova as $slovo) {
        // Tento cyklus se opakuje tolikrát, kolik je slov, ale pokaždé do proměnné slovo uloží jiné slovo.
        echo "Dalším slovem je $slovo";
}

echo "Počet slov v poli je " . count($slova);
Nahoru Odpovědět 17.8.2015 19:50
Týmová práce je důležitá proto, aby bylo možno obvinit z neúspěchu někoho jiného.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.