Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Ostatni element tablicy
e-Gandalf
post
Post #1





Grupa: Przyjaciele php.pl
Postów: 195
Pomógł: 0
Dołączył: 7.07.2003
Skąd: Warszawa

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


Nie wiem czy to na Pro, ale chyba tak (jesli sie myle to DeyV z pewnoscia poprawi (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) )

Jak odwolac sie do ostatniego elementu tablicy? Pytanie z pozoru proste, w php nie ma ladnego sposobu, ale mozna przeciez:

$array[count($array)-1] ... Tylko, ze to nie jest dobra metoda :/

Moj problem polega na tym, ze otrzymuje tablice i nie mam pojecia co w niej jest. Moim zadaniem jest dodac cos na koniec a potem (!!!) operowac na tym i oddac na koniec tablice, czyli:

[php:1:dda4f3b182]<?php
function &dodaj (&$array,$add) {
$array[] = Array();
foreach($add as $k=>$v) {
$array[count($array)-1][$k] = $v;
}
}
?>[/php:1:dda4f3b182]

Problem w tym, ze powyzszy kod np. wysypie sie w sytuacji gdy $array ma na wejsciu wartosc $array=Array('nazwa'=>1); ... czy jest jakis sposob aby zlapac referencje do ostatniego elementu tablicy?
Go to the top of the page
+Quote Post
adwol
post
Post #2





Grupa: Zarejestrowani
Postów: 691
Pomógł: 0
Dołączył: 6.08.2003

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


Cytat
Nie wiem czy to na Pro, ale chyba tak (jesli sie myle to DeyV z pewnoscia poprawi (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) )

Jak odwolac sie do ostatniego elementu tablicy? Pytanie z pozoru proste, w php nie ma ladnego sposobu, ale mozna przeciez:

$array[count($array)-1] ... Tylko, ze to nie jest dobra metoda :/

Moj problem polega na tym, ze otrzymuje tablice i nie mam pojecia co w niej jest. Moim zadaniem jest dodac cos na koniec a potem (!!!) operowac na tym i oddac na koniec tablice, czyli:

Tu niestety objawia się pewna niedogodność phpowych tablic, której np. nie ma w perlu -- mieszanie tablic zwykłych indeksowanych liczbami naturalnymi (list) i asocjacyjnych (haszy).

Po pierwsze indeksowanie skalarem troche samo w sobie przeczy pojęciu ostatni element.
Po prostu w tym przypadku tablica jest zbiorem par typu klucz => wartość i tyle.
php jednak wewnętrznie trzyma takie tablice i tak uporządkowane. Można się do tej kolejności dobrać funkcjami array_keys() i array_values().
Najprościej jest więc wyciągnąć sobie ostatni wpisany klucz z tablicy i skojarzoną z nim wartość
[php:1:48c3275503]<?php
array_pop(array_keys($array))
?>[/php:1:48c3275503]
Jest to rozwiązanie uniwersalne, choć w przypadku tablic liniowych trochę przesadzone.
Go to the top of the page
+Quote Post
Omega
post
Post #3





Grupa: Zarejestrowani
Postów: 273
Pomógł: 0
Dołączył: 5.05.2003
Skąd: Mazury

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


Można to robić odwracając tablicę. Czyli zeby otrzymac ostatni element:
[php:1:a9aad0bc88]<?php
function odczytaj($tablica){//odczytuje element na koncu tablicy
$tablica = array_reverse($tablica);
return $tablica[0];
}
function dodaj($element, &$tablica) {//dodaje element na koncu tablicy
$tablica[] = $element
}
function zamien($element, &$tablica){//aktualizuje ostatni element tablicy
$tablica = array_reverse($tablica);
$tablica[0] = $element;
$tablica = array_reverse($tablica);
}
?>[/php:1:a9aad0bc88]
Nie wiem tylko na ile wydajne jest takie rozwiązanie...
Go to the top of the page
+Quote Post
DeyV
post
Post #4





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




Jednak to forum będzie najlepsze (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
e-Gandalf
post
Post #5





Grupa: Przyjaciele php.pl
Postów: 195
Pomógł: 0
Dołączył: 7.07.2003
Skąd: Warszawa

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


Omega - To zadziala tylko jesli tablica sklada sie z indeksow numerycznych...

adwol: dokladnie nad czyms takim kombinowalem, array_pop jest tu wygodny, z tym, ze ja szukalem raczej po sciezce:

[php:1:0b80457cb6]<?php
$x=array_pop($array);
$x=Array('aa');
array[]=$x; // albo array_push
?>[/php:1:0b80457cb6]

Bo w Twoim wypadku trace cala strukture, a tego nie moge zrobic (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
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: 8.10.2025 - 14:20