Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Dodawanie nowych danych do tablicy a wskaźnik tablicy
Forum PHP.pl > Forum > Przedszkole
tryme
Witam,

Mam tablicę z której usuwam wszystkie pozycje pojedynczo za pomocą unset($tablica[$nr]).

Co zrobić aby dodając dane do pustej tablicy za pomocą array_push wystartować od wskaźnika tablicy 1 a nie 0?

Dziękuję za pomoc.
erix
Cytat
Mam tablicę z której usuwam wszystkie pozycje pojedynczo za pomocą unset($tablica[$nr]).

A nie lepiej:
  1. <?php
  2. $x = array(null);
  3. $x[] = 'wartosc o indeksie 1';
  4. ?>
tryme
Ok, tylko ja chciałbym usuwać wybrane przez siebie pozycje z tablicy pojedynczo a nie wszystkie naraz (raz dodaję, raz usuwam ... chwilowo nie ma nic, potem znów coś dodaję itd.).

Poza tym w twoim rozwiązaniu jest pozycja nr 0 tylko, że pusta.
EarthCitizen
To może
  1. <?php
  2. $a[1] = 'wartość';
  3. ?>
blooregard
To, co chcesz osiągnąć, podchodzi mi pod listę (taki algorytm).
Może Ci się przyda:

  1. <?php
  2. /**
  3.  * Klasa implementujaca algorytm listy
  4.  *
  5.  * @author blooregard
  6.  * @package algorithms
  7.  * @version 1.0
  8.  *
  9.  */
  10.  
  11. class Lista {
  12.  
  13.    /**
  14.      * tablica elementow listy
  15.      * @param integer
  16.      */
  17.    private $elements = array();
  18.  
  19.    /**
  20.      * konstruktor
  21.      */
  22.    public function __construct() {
  23.  
  24.    }//__construct()
  25.  
  26.    /**
  27.      * konwersja obiektu Lista do string
  28.      *
  29.      * @return object serializowany obiekt klasy Lista
  30.      */
  31.    public function __toString() {
  32.        return serialize($this);
  33.    }//
  34.    
  35.    /**
  36.      * wstawia element na podana pozycje w liscie
  37.      *
  38.      * Po wstawieniu rozmiar listy zwiekszany jest o jeden.
  39.      * Jesli wskazana pozycja jest ujemna lub wieksza od aktualnego rozmiaru listy,
  40.      * zwracany jest FALSE
  41.      *
  42.      * @param integer pozycja listy, n ktorej ma byc wstawiony element
  43.      * @param mixed wartosc do wstawienia
  44.      *
  45.      */
  46.    public function insert($element , $value) {
  47.        if ((integer)$element < 0 || (integer)$element > $this->size() || empty($value)) return false;
  48.        $i = 0;
  49.        $result_array = array();
  50.  
  51.        foreach ($this->elements as $current) {
  52.            if ($i == $element) {
  53.                $result_array[] = $value;
  54.            }//if
  55.            $result_array[] = $current;
  56.            $i++;
  57.        }//foreach
  58.  
  59.        $this->elements = (array)$result_array;
  60.    }//insert()
  61.  
  62.    /**
  63.      * dodaje element na koncu listy
  64.      *
  65.      * @param mixed wartosc do wstawienia
  66.      */
  67.    public function add($value) {
  68.        if (empty($value)) return false;
  69.        $this->elements[] = $value;
  70.    }//add()
  71.  
  72.    
  73.    /**
  74.      * usuwa element listy o podanym indeksie
  75.      *
  76.      * Romiar listy zostaje zmniejszony o 1. Jesli wskazana pozycja
  77.      * jest ujemna badz wykracza poza liste, zwracany jest FALSE
  78.      *
  79.      * @param integer indeks elementu do usuniecia z listy
  80.      */
  81.    public function delete($element) {
  82.        if ($element < 0 || $element > $this->size()) return false;
  83.        foreach ($this->elements as $current) {
  84.            if (!($i == $element)) {
  85.                $result_array[] = $current;
  86.            }//if
  87.            $i++;
  88.        }//foreach
  89.  
  90.        $this->elements = (array)$result_array;
  91.    }//delete()
  92.  
  93.    /**
  94.      * zwraca podany element listy
  95.      *
  96.      * Jesli wskazana pozycja jest ujemna lub wieksza od aktualnego rozmiaru listy,
  97.      * zwracany jest FALSE
  98.      *
  99.      * @param integer indeks elementu do pobrania
  100.      *
  101.      */
  102.    public function get($element) {
  103.        if ($element < 0 || $element > $this->size()) return false;
  104.        return ($this->elements[$element]);
  105.    }//get()
  106.  
  107.  
  108.    /**
  109.      * ustawia wartosc podanego elemenu listy
  110.      *
  111.      * Jesli wskazana pozycja jest ujemna lub wieksza od aktualnego rozmiaru listy,
  112.      * zwracany jest FALSE
  113.      *
  114.      * @param integer indeks elementu do ustawienia
  115.      * @param mixed wartosc
  116.      */
  117.    public function set($element ,$value) {
  118.        if ($element < 0 || $element > $this->size()) return false;
  119.        $this->elements[$element] = $value;
  120.    }//get()
  121.  
  122.  
  123.    /**
  124.      * zwraca pozycje podanej wartosci w liscie
  125.      *
  126.      * Jesli podana wartosc istnieje w liscie, zwraca indeks elementu
  127.      *
  128.      * @param mixed szukana wartosc
  129.      */
  130.    public function indexOf($value) {
  131.        if (empty($value)) return false;
  132.  
  133.        $i = 0;
  134.        foreach($this->elements as $current) {
  135.            if ($current == $value) return $i;
  136.            $i++;
  137.        }//foreach
  138.        return false;
  139.    }//indexOf()
  140.    
  141.  
  142.    /**
  143.      * zwraca aktualny rozmiar listy
  144.      */
  145.    public function size() {
  146.        return count($this->elements);
  147.    }//size()
  148.  
  149.    /**
  150.      * wyswietla liste
  151.      */
  152.    public function show() {
  153.        $i = 0;
  154.        for ($i; $i < $this->size(); $i++) {
  155.            echo '<br />element '.$i.' : '.$this->elements[$i];
  156.        }//for
  157.    }//show()
  158.  
  159.  
  160.    /**
  161.      *  wykorzystany algorytm: sortowanie babelkowe
  162.      * liczba przebiegow "przestawiania" rowna jest ilosci elementow listy-1,
  163.      * czyli zlozonosc algorytmu to
  164.      * O(N*N)
  165.      *  gdzie N - ilosc elementow listy (zlozonosc kwadratowa):
  166.      *
  167.      *
  168.      * @param object $this
  169.      */
  170.    public function bubblesort() {
  171.        $temp = NULL;
  172.  
  173.        //zewn. petla - powtarzana tyle razy, ile jest elementow listy
  174.        for ($y = 0; $y < $this->size(); $y++) {
  175.            //wewn. petla - dla kazdej pary dokonuje porownania i zamienia miejscami elementy
  176.            // $i oraz $i+1, jesli $i > $i+1
  177.            for ($i = 0; $i < $this->size()-1; $i++) {
  178.                if ( $this->get($i) > $this->get($i+1) ) {
  179.                    $temp = $this->get($i);
  180.                    $this->set($i , $this->get($i+1));
  181.                    $this->set($i+1 , $temp);
  182.                }//if
  183.            }//for
  184.        }//for
  185.    }//bubblesort()
  186.  
  187.    
  188. }// class Lista
  189.  
  190.  
  191. //test listy
  192. $lista = new Lista();
  193.  
  194.  
  195. $lista->add(6);
  196. $lista->add(2);
  197. $lista->add(3);
  198. $lista->add(1);
  199. $lista->add(5);
  200. $lista->add(8);
  201. $lista->add(7);
  202.  
  203. $lista->show();
  204. $lista->bubblesort();
  205.  
  206. echo '<br /><br />po posortowaniu: ';
  207. $lista->show();
  208. ?>
tryme
Już rozwiązałem swój problem w następujący sposób

  1. <?php
  2. if (count($tablica) == 0)
  3.        $tablica[1] = array('coś tam coś tam']);
  4.    else
  5.        array_push($tablica, array('array('coś tam coś tam]));
  6. ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.