Autor Zpráva
_fantomas
Profil
Ahoj, mám pole (url)

Array ( [0] => jeden [1] => dva [2] => tri [3] => styri [4] => pat [5] => sest [6] => sedem )

Potrebujem napísať volajakú funkciu alebo cyklus ktorý mi spraví viac polí a to aby postupne pridal o jednu hodnotu naviac
takže v tom prípade by to malo vyzerať

Array ( [0] => jeden )

Array ( [0] => jeden [1] => dva )

Array ( [0] => jeden [1] => dva [2] => tri )

Array ( [0] => jeden [1] => dva [2] => tri [3] => styri )

Array ( [0] => jeden [1] => dva [2] => tri [3] => styri [4] => pat )

Array ( [0] => jeden [1] => dva [2] => tri [3] => styri [4] => pat [5] => sest )

Array ( [0] => jeden [1] => dva [2] => tri [3] => styri [4] => pat [5] => sest [6] => sedem )

Neviem vôbec či to je možne alebo ako to spraviť. Vdaka za rady.
Tomášeek
Profil
_fantomas:
A jéje, domácí úkol. Samozřejmě, že to jde, když jste to dosali jako testovací úlohu :-)

Zkus nejprve něco vymyslet sám, a teprve pak, až to "něco" nebude fungovat, přijď pro radu, jak to dát do kupy.
weroro
Profil
V PHP je to pomerne jednoduché.

Stačí ak si vytvoríš premennú s poľom, napr.
$pole = [];

a do tohto poľa pridáš položky nasledovne
$pole[] = 'hodnota1';
$pole[] = 'hodnota2';
$pole[] = 'hodnota3';
$pole[] = 'hodnota4';

Výsledkom bude naplnené pole
array(
[0] => 'hodnota1',
[1] => 'hodnota2',
[2] => 'hodnota3',
[3] => 'hodnota4'
);
_fantomas
Profil
No mám to takto.

    public static function pager($parameters)
    {
        $pole = [];
        foreach ($parameters as $index => $value)
        {
            $pole[] = $value;
            print_r($pole);
        }
    }

Ak mám v URL hodnotu - localhost/admin/jeden/dva/tri/styri/pat/sest/sedem

tak mi to vytvorí polia.

Array ( [0] => jeden ) Array ( [0] => jeden [1] => dva ) Array ( [0] => jeden [1] => dva [2] => tri ) Array ( [0] => jeden [1] => dva [2] => tri [3] => styri ) Array ( [0] => jeden [1] => dva [2] => tri [3] => styri [4] => pat ) Array ( [0] => jeden [1] => dva [2] => tri [3] => styri [4] => pat [5] => sest ) Array ( [0] => jeden [1] => dva [2] => tri [3] => styri [4] => pat [5] => sest [6] => sedem )

Teraz mam zas problém vypísat dane pole. Ako na to o.O
weroro
Profil
Presuň print_r zo 7 riadku medzi riadky 8 a 9. teraz sa ti totiž vypíše pole pri každej jednej iterácii toho cyklu foreach. Ty musíš najprv počkať kým sa to pole naplní, to znamená, že kým neskončí cyklus a až potom to pole vypíšeš.
Monkeys
Profil *
alebo takto:

$pole = array();
array_walk($parameters, function(&$key, $item) use ( &$pole ){
$pole[] = $item;
});

print_r($pole);

M.
_fantomas
Profil
Ide o to že ja som dosiahol čo som chcel.
Ak mám v URL /jeden/dva/tri
tak som chcel aby to vypisalo prave toto
Array ( [0] => jeden ) 
Array ( [0] => jeden [1] => dva ) 
Array ( [0] => jeden [1] => dva [2] => tri )

len problém je ten že ked chcem potom vybrat z tích 3 polí jedno trebarz to druhe tak ho neviem vypísať, iba všetky naraz, rozumieme sa? :)
IdemeNaHavaj
Profil
tak si tie arraye este obal do jedneho arrayu a z neho si vypises ten array ktory chces
TomášK
Profil
Nejde to takto print_r(array_slice($parameters, 0, 2))? Netestoval jsem to.
_fantomas
Profil
No mám to takto.

        $i = 0;
        $pole = [];
        foreach ($parameters as $index => $value)
        {
            $pole[] = $value;
            print_r(array_slice($parameters, $i++));
        };

ak mám v url jeden/dva/tri/styri
tak mi to vypise

Array ( [0] => jeden [1] => dva [2] => tri [3] => styri ) 
Array ( [0] => dva [1] => tri [2] => styri ) 
Array ( [0] => tri [1] => styri ) 
Array ( [0] => styri )

TomášK: takže to čo si mi napísal funguje presne naopak, ja som potreboval postupné pridavanie a teraz je to postupné odoberanie.
Porblém mám už len s tím že ak mam tie polia tak neviem vypísať iba jednotlivé ale iba naraz všetky a IdemeNaHavaj to som sa pokúšal ale nepodarilo sa mi to. Nemáš menší príklad aby som to vedel napísať?
TomášK.
Profil *
for($i = 1; $i < count($parameters); $i++) {
  print_r(array_slice($parameters, 0, $i));
}

Pokud chceš pouze třetí, pak print_r(array_slice($parameters, 0, 3));.
Keeehi
Profil
_fantomas:
Já mám pocit že že vlastně nevíš co chceš. Respektive víš co chceš udělat, ale sem jsi to nenapsal. Snažíš se tady vyřešit nějaká podproblém, který si myslíš že povede k celkovému řešení, ale pokud ano, tak nejspíš nějak krkolomně. Takže víme, že v url máš n parametrů. K čemu slouží? K čemu potřebuješ vybrat určitou podmnožinu? Jaká pro ní mají platit pravidla?
Zapomeň teď úplně na kód a popiš třeba z pohledu návštěvníka, k čemu to má sloužit (např. chci mít na stránce tlačítka, která budou filtrovat tabulku, hodnoty v url představují právě zvolený filter).
_fantomas
Profil
Potrebujem spraviť to malé menu ktoré je väčšinou pod hlavným nádpísom Domov > Obchod > Objednávky ...
Preto potrebujem vybrať postupne tie hodnoty z url aby som ich potom mohol dosadiť do odkazu toho menu.
Keeehi
Profil
    public static function pager($parameters)
    {
        $result = []
        foreach ($parameters as $index => $value)
        {
            $result[] =  "<a href=\"".implode('/', array_slice($parameters, 0, $index+1))."\">$value</a>";
        }
        return implode(' > ', $result);
    }
_fantomas
Profil
Keeehi:
Vdaka, funguje.


Ešte by som poprosil, do odkazu mo to dosadí to čo je v url čiže niečo ako <a href="add-product">add-product</a>
Potreobval by som tam vložiť podmienky že ak je napríklad v url to add-product aby to do odkazu nenapísalo add-product ale zameniť to za Pridať produkt.
Keeehi
Profil
    public static function pager($parameters)
    {
        $result = []
        foreach ($parameters as $index => $value)
        {
            $result[] =  "<a href=\"".implode('/', array_slice($parameters, 0, $index+1))."\">".self::translate($value)."</a>";
        }
        return implode(' > ', $result);
    }
    
    private static function translate($input)
    {
        return [
            "add-product" => "Pridať produkt",
            "foo" => "Foo",
            "bar" => "Bar"        
        ][$input];
    }
_fantomas
Profil
Keeehi: vdaka.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0