Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Igor 27. 03. 2015, 19:25:24

Název: Vytvoření seznamu v php
Přispěvatel: Igor 27. 03. 2015, 19:25:24
Ahoj, jak napsat tenhle seznam do jedné proměnné? Nedokážu s tím hnout. Děkuju

Kód: [Vybrat]
$_['a'] = 'a';
$_['a']['aa'] = 'aa';
$_['a']['ab'] = 'ab';
$_['a']['ac']['aaa'] = 'aaa';
$_['b'] = 'b'';
$_['b']['aa'] = 'aa';
$_['b']['bb'] = 'bb';
Název: Re:Vytvoření seznamu v php
Přispěvatel: huggog 27. 03. 2015, 20:00:35
1) jednak si oprav si uvozovku, fakt je lepsi si to aspon jednou pustit. Jestli ti krivdim, tak si zapni vypis chyb
2) spusť si ten skript, vyhodí ti chybu
3) zadej chybu do googlu
4) http://stackoverflow.com/questions/2058635/cannot-use-string-offset-as-an-array-error

bud si tam pridej dalsi rozmery, aby kazdy prvek mel 3 klice, misto zadneho dej treba 'x' ( $_['a'] = 'a'; -> $_['a']['x']['x'] = 'a';)    - nemuzes mit v poli jednou prvek retezec a jindy pole. php je tolerantni, ale ma to hranice :))
nebo si na to vytvor tridu, jestli potrebujes mit to co tam mas


Název: Re:Vytvoření seznamu v php
Přispěvatel: huggog 27. 03. 2015, 20:04:20
ten prvni smajlik mely byt strednik a zavorka  ; )
Název: Re:Vytvoření seznamu v php
Přispěvatel: Igor 27. 03. 2015, 20:20:27
Díky a jak by taková třída mohla vypadat ?
Název: Re:Vytvoření seznamu v php
Přispěvatel: karel 28. 03. 2015, 16:57:37
php je tolerantni, ale ma to hranice :))

Jo a tou je Igor
Název: Re:Vytvoření seznamu v php
Přispěvatel: eL 28. 03. 2015, 22:39:40
Citace
$metaData = 0;

$_['a'][$metaData] = 'a';
$_['a']['aa'][$metaData] = 'aa';
$_['a']['ab'][$metaData] = 'ab';
$_['a']['ac']['aaa'][$metaData] = 'aaa';
$_['b'][$metaData][$metaData] = 'b'';
$_['b']['aa'][$metaData] = 'aa';
$_['b']['bb'][$metaData] = 'bb';

ale nic to nezmeni na tom, ze to je hnusny zacatecnicky reseni, mnohem hezci by to bylo jako iterovatelnej objekt a ten do sebe zanorovat. Samozrejme to bude mit vyssi rezii, ale pokud nejde o pole s statisici/miliony prvku, tak rozhodne na miste.

Koncept bez iteratoru, nezkouseno, jen nastrel:
Citace
<?php

class Node {

    /**
     * @var Node[]
     */
    private $nodes;
    private $name;

    public function __construct($name = null) {
        $this->nodes = array();
        $this->setName($name);
    }

    public function setName($name) {
        $this->name = $name;
    }

    public function getName() {
        return $this->name;
    }

    /**
     * @param string $key
     * @return Node|null
     */
    public function getNode($key) {
        return isset($this->nodes[$key]) ? $this->nodes[$key] : null;
    }

    public function addNode($key, Node $node) {
        $this->nodes[$key] = $node;
    }
   
    public function getNodes(){
        return $this->nodes;
    }
   
    public function getAllNodes(){
        $output = array();
        foreach($this->nodes as $key => $node){
            $output[$key] = $node;
            $output = array_merge($output, $node->getAllNodes());
        }
        return $output;
    }
}

$tree = new Node();
$tree->addNode('a', new Node('a'));
$tree->getNode('a')->addNode('aa', new Node ('aa'));
$tree->getNode('a')->addNode('ab', new Node ('ab'));
$tree->getNode('a')->addNode('ac', new Node ('ac'));
$tree->getNode('a')->getNode('ac')->addNode('aaa', new Node ('aaa'));
$tree->addNode('b', new Node('b'));
$tree->getNode('b')->addNode('aa', new Node ('aa'));
$tree->getNode('b')->addNode('bb', new Node ('bb'));
//1. demo po levelech
foreach($tree->getNodes() as $key=>$node){
    /** @var $node Node **/
    $node->getName();
    $sublist = $node->getNodes();
}
//2. vse za sebou, unikatni klice musi byt ale v celem strome
foreach($tree->getAllNodes() as $key => $node){
    //....
}