Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Zamiana zwykłej tablicy na tablice asocjacyjną
Forum PHP.pl > Forum > Przedszkole
Jarod
Szukałem w manualu gotowej funkcji ale nie znalazłem takiej. Jedyne co mogłoby pomóc to array_combine() ale musiałbym tworzyć drugą tablice. O co mi chodzi.

Mam taką tablice:
  1. <?php
  2. $tablica = array('nazwa1', 'parametr1', 'nazwa2', 'parametr2');
  3. ?>


Chciałbym szybkim sposobem (wiem jak to zrobić ale wiem też, że da się lepiej) utworzyć tablicę, ktr będzie wyglądać tak:

  1. <?php
  2. $tablica = array('nazwa1'=>'parametr1', 'nazwa2'=>'parametr2');
  3. ?>


Możecie coś doradzić?
Kicok
Najprościej pętlą:
  1. <?php
  2. $tablica = array('nazwa1', 'parametr1', 'nazwa2', 'parametr2');
  3. $c = count($tablica);
  4.  
  5. for($i=0; $i<$c; $i+=2)
  6. {
  7. $tablica[$tablica[$i]] = $tablica[($i+1)];
  8. unset($tablica[$i]);
  9. unset($tablica[($i+1)]);
  10. }
  11. ?>



Jednak jeśli któraś z nazw (zamienianych na klucze tablicy) jest liczbą, to całość może się posypać. Lepiej będzie zrobić to na 2 tablicach:
  1. <?php
  2. $tablica = array('nazwa1', 'parametr1', 'nazwa2', 'parametr2');
  3. $c = count($tablica);
  4. $nowa_tablica;
  5.  
  6. for($i=0; $i<$c; $i+=2) {
  7. $nowa_tablica[$tablica[$i]] = $tablica[($i+1)];
  8. }
  9.  
  10. unset($tablica);
  11. ?>
Jarod
@Kicok dzięki ale takie coś właśnie mam. Myślałem że da się inaczej.
mike
Cytat(J4r0d @ 11.03.2007, 13:53:42 ) *
@Kicok dzięki ale takie coś właśnie mam. Myślałem że da się inaczej.
Jedyne co możesz zrobić to wrzucić to w funkcję i zastosować array_walk(). Będziesz miał rozwiązanie wielokrotnego użytku i bardziej skalowalne smile.gif

Co do samego zagadnienia nie da się tego rozwiązać inaczej niż iteracyjne przejście po tej tablicy w celu stworzenia innej.
Jarod
Wiecie co? Jest jeszcze inna kwestia. Wykorzystując ten sposób jeśli podam w adresie coś takiego:
Cytat


to ostatnie dwa parametry nie są wrzucane do tablicy bo się powtarzają. Nie jest to dla mnie problemem, bo nie będę przecież przekazywał podwójnych takich samym parametrów.. Nie wiem tylko dlaczego tak się dzieje..

  1. <?php
  2. public function analyseUrl()
  3. {
  4. if (substr($this->sUrl, 0, 1) == '/') $this->sUrl = substr($this->sUrl, 1);
  5. if (substr($this->sUrl, -1) == '/') $this->sUrl = substr($this->sUrl, 0, -1);
  6.  
  7. if (!is_null($this->sUrl)) $this->aParameters = explode(self::UrlDelimiter, $this->sUrl);
  8.  
  9. $this->aToken['Controller'] = basename($_SERVER['SCRIPT_FILENAME']);
  10. if (!empty($this->aParameters)) $this->aToken['Action'] = $this->aParameters[0];
  11. else $this->aToken['Action'] = 'default';
  12.  
  13. for($iSize = count($this->aParameters), $i=1; $i<$iSize; $i+=2)
  14. {
  15. $this->aToken[$this->aParameters[$i]] = isset($this->aParameters[$i+1]) ? $this->aParameters[$i+1] : NULL;
  16. }
  17.  
  18. return $this->aToken;
  19. }
  20. ?>
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.