NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Rozdelenie textu pomocou PHP

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Patrik Čelko:17.8.2015 18:31

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
Odpovídá na Patrik Čelko
Neaktivní uživatel:17.8.2015 18:40

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
17.8.2015 18:40
Neaktivní uživatelský účet
Avatar
Odpovídá na Patrik Čelko
Dominik Klapuch:17.8.2015 18:58

Rada od Neaktivní uživatel 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
Odpovídá na Neaktivní uživatel
Neaktivní uživatel:17.8.2015 19:50

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
Neaktivní uživatelský účet
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.