Wyobraźmy sobie, że mamy dwie tablice:
$array_1 = array(
'0' => 'zero',
'1' => 'one',
'2' => 'two',
'3' => 'three',
);
$array_2 = array(
'zero' => '0',
'one' => '1',
'two' => '2',
'three' => '3',
);
Teraz chciałbym wstawić array('sample_key' => 'sample_value')
po trzecim elemencie każdej tablicy. Jak mogę to zrobić?
Odpowiedzi:
array_slice()
może być użyty do wyodrębnienia części tablicy, a operator tablicy+
unii ( ) może zrekombinować części.Ten przykład:
daje:
źródło
+
nie powinien być używany! Użyjarray_merge
zamiast tego! UWAGA, jeśli indeksy są liczbami całkowitymi (normalna tablica, a nie skrót),+
nie będą działać zgodnie z oczekiwaniami !!!array_merge
zachowanie w odniesieniu do klawiszy numerycznych jest nieodpowiednie dla tego pytania.count($array)-3
możesz po prostu określić null dla tego samego efektu. Ponadto używaniearray_merge
zgodnie z zaleceniami TMS nie będzie wymagać użycia unikalnego indeksu. PRZYKŁAD: Dodaj „nową wartość” do istniejącej tablicy:$b = array_merge( array_slice( $a, 0, 1, true ), array( 'new-value' ), array_slice( $a, 1, null, true ) );
+
wersetacharray_merge
. Jeśli chcesz wstawić rzeczy do tablicy numerycznej, nie powinieneś jej używać,+
ponieważ prawdopodobnie nie spełni twoich oczekiwań. Ale nie powinieneś też używaćarray_merge
; w przypadku tablic numerycznych cały problem rozwiązuje się za pomocąarray_splice
funkcji. W przypadku tablic asocjacyjnych lub mieszanych prawdopodobnie nie chcesz ponownie indeksować kluczy numerycznych, więc użycie+
jest całkowicie odpowiednie.Do pierwszej tablicy użyj
array_splice()
:wynik:
dla drugiego nie ma zamówienia, więc musisz tylko:
I posortuj klucze według tego, co chcesz.
źródło
kod:
przykład:
Może nie wygląda idealnie, ale działa.
źródło
Oto prosta funkcja, której możesz użyć. Po prostu podłącz i graj.
To jest Wstaw według indeksu, a nie według wartości.
możesz przekazać tablicę lub użyć tej, którą już zadeklarowałeś.
EDYCJA: krótsza wersja:
Teraz możesz przetestować kod za pomocą
Rezultat to:
źródło
źródło
Ta funkcja obsługuje:
STOSOWANIE:
WYNIKI:
źródło
Niedawno napisałem funkcję, aby zrobić coś podobnego do tego, co brzmi jak próbujesz, jest to podobne podejście do odpowiedzi clasvdb.
Zasadniczo wstawia w określonym punkcie, ale pozwala uniknąć nadpisywania poprzez przesunięcie wszystkich elementów w dół.
źródło
Jeśli nie wiesz , że chcesz wstawić go w pozycji 3, ale znasz klucz , po którym chcesz go wstawić, po obejrzeniu tego pytania przygotowałem tę małą funkcję.
Oto skrzypce codepad, aby zobaczyć go w akcji: http://codepad.org/5WlKFKfz
Uwaga: array_splice () byłby o wiele bardziej wydajny niż array_merge (array_slice ()), ale wtedy klucze wstawionych tablic zostałyby utracone. Westchnienie.
źródło
Czystsze podejście (w oparciu o płynność użytkowania i mniej kodu).
Stosowanie:
źródło
Najprostsze rozwiązanie, jeśli chcesz wstawić (element lub tablicę) po określonym kluczu:
Więc jeśli masz:
I wykonaj:
Będziesz miał:
źródło
Użycie array_splice zamiast array_splice daje o jedno mniejsze wywołanie funkcji.
źródło
Robię to jak
źródło
Właśnie stworzyłem klasę ArrayHelper, która bardzo ułatwiłaby indeksy liczbowe.
Przykład:
Począwszy $ tablica:
Wynik:
źródło
Jest to lepsza metoda, jak wstawić element do tablicy na pewnej pozycji.
źródło
Potrzebowałem czegoś, co mogłoby zrobić wkładkę wcześniej, zastąpić, po kluczu; i dodaj na początku lub na końcu tablicy, jeśli klucz docelowy nie zostanie znaleziony. Domyślnie wstawia się po kluczu.
Nowa funkcja
Wpisz kod
Wynik
źródło
Bardzo prosta 2-strunowa odpowiedź na twoje pytanie:
Najpierw wstawiasz cokolwiek do trzeciego elementu za pomocą array_splice, a następnie przypisujesz wartość do tego elementu:
źródło
To stare pytanie, ale w 2014 roku opublikowałem komentarz i często do niego wracam. Myślałem, że zostawię pełną odpowiedź. To nie jest najkrótsze rozwiązanie, ale jest dość łatwe do zrozumienia.
Wstaw nową wartość do tablicy asocjacyjnej, w pozycji numerowanej, zachowując klucze i zachowując porządek.
źródło
Nie tak konkretny jak odpowiedź Artefacto, ale opierając się na jego sugestii użycia array_slice (), napisałem następną funkcję:
Cechy:
Przykłady użycia:
źródło
Jeśli chcesz tylko wstawić element do tablicy w określonej pozycji (na podstawie odpowiedzi @clausvdb):
źródło
Oto moja wersja:
źródło
łatwy sposób .. używając
array_splice()
Wynik..
źródło
To jest inne rozwiązanie w
PHP 7.1
źródło
Możesz wstawiać elementy podczas pętli foreach , ponieważ ta pętla działa na kopii oryginalnej tablicy, ale musisz śledzić liczbę wstawionych linii (nazywam to „wzdęciem” w tym kodzie):
Oczywiście można uogólnić tę ideę „wzdęcia”, aby obsłużyć dowolne wstawianie i usuwanie podczas pętli foreach.
źródło