Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] Zamiana zwykłej tablicy na tablice asocjacyjną
Jarod
post
Post #1





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

Ostrzeżenie: (0%)
-----


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ć?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
Kicok
post
Post #2





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

Ostrzeżenie: (0%)
-----


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. ?>
Go to the top of the page
+Quote Post
Jarod
post
Post #3





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

Ostrzeżenie: (0%)
-----


@Kicok dzięki ale takie coś właśnie mam. Myślałem że da się inaczej.
Go to the top of the page
+Quote Post
mike
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Co do samego zagadnienia nie da się tego rozwiązać inaczej niż iteracyjne przejście po tej tablicy w celu stworzenia innej.
Go to the top of the page
+Quote Post
Jarod
post
Post #5





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

Ostrzeżenie: (0%)
-----


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. ?>
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 28.09.2025 - 08:48