2012-12-31 17 views
11

Jak zmodyfikować ostatni element w tablicy?Modyfikuj ostatni element w tablicy

Tablica wygląda następująco:

$fields = array("firstName = 'Bob', ", 
       "lastName = 'Smith', ", 
       "email = '[email protected]', ", 
       "address = '123 anystreet', "); 

Tablica jest generowany przez skrypt, który tworzy wartości i dodaje się przecinek/miejsca na końcu każdego łańcucha. Chcę usunąć ten przecinek/spację z tylko ostatniego elementu w tej tablicy. Należy pamiętać, że wartości mogą w rzeczywistości zawierać kombinację przecinków/spacji, więc tylko ostatni element i dwa ostatnie znaki ostatniego elementu muszą zostać usunięte.

Spojrzałem na funkcję end(), ale nie sądzę, że to pomoże, ponieważ po prostu dostaje wartość.

Edytuj Ok, więc utworzyłem tę funkcję/tablicę, aby mieć tylko jedną funkcję mysql do aktualizacji użytkowników. Coś w rodzaju funkcji wykrywania zmian i tylko przekazuje wymagane/zmienione pola. Nie zdawałem sobie sprawy z problemów związanych z tym podejściem. Pomyślałem, że skoro już miałem zapytania mysql napisane w moich starych funkcjach, nie powinno być problemu w ten sposób. Plik, w którym się znajduje, nie będzie publicznie dostępny. Zamierzam użyć najlepszej odpowiedzi, która działa dla mnie, ale zamierzam poszukać, dlaczego jest to problematyczne i byłbym wdzięczny za komentarze/linki dotyczące tego, co jest nie tak z tym podejściem. Dzięki.

+2

To wygląda jak SQL injection czeka się stało –

+0

@LightnessRacesinOrbit używam mysqli_real_escape_string w generowaniu tej tablicy i odkażania wszystkie dane uprzednio , dzięki za troskę. –

+1

Still. Dlaczego nie używać par klucz/wartość natywnie? Przechowywanie pełnych wyrażeń SQL powoduje problemy, takie jak ten, którego doświadczasz teraz. –

Odpowiedz

25

Podoba Ci się!

end($array); 
$key = key($array); 
reset($array); 
+3

Jeśli tablica jest zwykłą numeryczną odpowiedzią Chrisa jest lepsze IMO. Jeśli tablica jest skojarzeniowa, tylko ta zadziała. –

+0

"Czy to też zadziała, jeśli tablica jest asocjacyjna? Powinienem opublikować ją w ten sposób: s" –

+0

Tak, to pomaga :-) –

8

Jest skrótowym sposobem, aby to zrobić, ale jest to łatwiejsze do naśladowania, jeśli jest podzielone na części:

$index = count($fields) - 1; 
$value = $fields[$index]; 
$fields[$index] = preg_replace("/,\ $/", "", $value); 
+2

Nice. Byłoby nawet lepiej, gdyby po prostu użyłeś 'rtrim ($ value, ',');' zamiast wyrażenia regularnego. – jeroen

+1

lub po prostu usuń dwa ostatnie znaki z 'substr'ing. –

+2

@ Jan Dvorak Lub OP może wygenerować tablicę i implodować przy pomocy ',' i cały problem zniknie. – jeroen

-1

myślę Implode funkcja PHP może być dobrą alternatywą, zamiast generowania przecinki siebie.

Pomijając, że trzeba by użyć czegoś takiego:

$lastfield = $fields[count($fields)-1]; 
$lastfield = str_split($lastfield,strlen($lastfield)-2); 
$fields[count($fields)-1] = $lastfield; 

Pierwsze i trzecie linie są włączone, aby drugą linię łatwiejsze do odczytania, ale to może być łatwo spotęgowane do jednej linii.

+0

Działa to tylko w przypadku macierzy numerycznych. Nie działa z powiązanymi tablicami. –

0

natknęliśmy się na to dzisiaj. Myślę, że najłatwiej non-pointer łamanie sposobem byłoby:

array_splice($array, -1, 1, strtolower(end(array_values($array))).'blah'); 

oczywiście można upuścić array_values ​​jeśli nie masz do opieki nad wskaźnikiem. , ale zastanawiam się, czy jest to dobry sposób, ponieważ wyciąg-n-zastąpić rzeczy splice może być bardziej wymagający niż pop lub coś?

+0

Myślę, że array_pop jest prostszy niż array_splice dla tego przypadku. –

+0

w prawo, wydaje się szybsze –

3

Aby zmienić wartość ostatniego elementu numerycznych:

$lastValue = array_pop($fields); 
$fields[] = rtrim(', ',$lastValue); 

Jeśli przygotowujesz te wartości dla zapytania Proponuję przechowywania wszystko bez przecinków w tablicy następnie wywołanie implozji na tej tablicy, gdy są potrzebne, aby zapobiec spływu problemów przecinkami

0

Istnieje kilka sposobów:

1) asocjacyjnych, jeśli nie wiem, ostatni kluczowy element, lepiej znaleźć ostatnim elementem kluczowym pierwszy i zmienić jego wartość.

2) jeśli nie wiesz i nie dbasz o klawisze, możesz wyciąć ostatni element i utworzyć nowy.

$array[] = array_pop($array).' additional text'; 
0

Tablica pop i push to najprostszy sposób na wykonanie podstawowych tablic. (Wiem, że to nie jest technicznie kwestia, ale wiele osób przyjdzie tutaj, szukając odpowiedzi również w odniesieniu do prostych tablic).

<?php 

function update_last(&$array, $value){ 
    array_pop($array); 
    array_push($array, $value);  
} 

?> 

Następnie można korzystać z funkcji takich jak to:

<?php 

$array = [1,2,3]; 

update_last($array, 4); //$array = [1,2,4]; 

?>