Vytvoření seznamu v php

Igor

Vytvoření seznamu v php
« kdy: 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';


huggog

Re:Vytvoření seznamu v php
« Odpověď #1 kdy: 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



huggog

Re:Vytvoření seznamu v php
« Odpověď #2 kdy: 27. 03. 2015, 20:04:20 »
ten prvni smajlik mely byt strednik a zavorka  ; )

Igor

Re:Vytvoření seznamu v php
« Odpověď #3 kdy: 27. 03. 2015, 20:20:27 »
Díky a jak by taková třída mohla vypadat ?

karel

Re:Vytvoření seznamu v php
« Odpověď #4 kdy: 28. 03. 2015, 16:57:37 »
php je tolerantni, ale ma to hranice :))

Jo a tou je Igor


eL

Re:Vytvoření seznamu v php
« Odpověď #5 kdy: 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){
    //....
}