Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Ostatni element tablicy
Forum PHP.pl > Forum > PHP
e-Gandalf
Nie wiem czy to na Pro, ale chyba tak (jesli sie myle to DeyV z pewnoscia poprawi 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?
adwol
Cytat
Nie wiem czy to na Pro, ale chyba tak (jesli sie myle to DeyV z pewnoscia poprawi 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.
Omega
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...
DeyV
Jednak to forum będzie najlepsze smile.gif
e-Gandalf
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 sad.gif
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.