Jak mogę dodać element do początku tablicy bez zmiany wartości kluczy tablicy w PHP?Dodawanie elementu do początku tablicy bez zmiany innych kluczy tablicy
Odpowiedz
Jeśli używasz (np dosłownych) Klawisze własny przypisany array_unshift() to zrobi.
Jeśli używasz kluczy generowanych automatycznie (numerycznych), jak to działa? Użyj "-1" jako nowego pierwszego klucza?
EDIT:
Dziękuję Jasons za wskazanie błędu w tej odpowiedzi.
DOWOLNY klucz numeryczny zostanie ponownie zindeksowany przez array_unshift()
, bez względu na to, czy został wygenerowany automatycznie, czy też przypisany samemu sobie - jeśli jest to numeryczny, zostanie zaszyfrowany. Zobacz link do powyższej dokumentacji, aby uzyskać szczegółowe informacje.
nie, ponieważ jeśli indeksy reprezentują identyfikatory w tabeli, nigdy nie będzie zerowego indeksu, więc to działa dobrze w tych sytuacjach – Nicola
@Nicola Przepraszam - ja nie rozumiem, co chcesz mi powiedzieć. –
Mam na myśli, że jeśli zwrócisz wiersze z bazy danych, a kluczami tablicy są identyfikatory wierszy, to tablica nigdy nie będzie mieć klucza 0. Dlatego w tym przypadku sytuacja nie wystąpiłaby, gdy indeks wynosiłby -1. – Nicola
Użyj array_unshift()
. (Jak wspomniano, będzie przechowywać nienaruszone klucze ciągów, ale nie klucze numeryczne).
"Wszystkie klawisze tablicy numerycznej zostaną zmodyfikowane, aby rozpocząć odliczanie od zera, podczas gdy klawisze literalne nie zostaną dotknięte." (http://www.php.net/array-unshift) –
array_unshift nie będą modyfikować non klawiszy numerycznych
spróbuj tego:
function array_insert(&$array, $insert, $position = -1) {
$position = ($position == -1) ? (count($array)) : $position ;
if($position != (count($array))) {
$ta = $array;
for($i = $position; $i < (count($array)); $i++) {
if(!isset($array[$i])) {
die(print_r($array, 1)."\r\nInvalid array: All keys must be numerical and in sequence.");
}
$tmp[$i+1] = $array[$i];
unset($ta[$i]);
}
$ta[$position] = $insert;
$array = $ta + $tmp;
//print_r($array);
} else {
$array[$position] = $insert;
}
//ksort($array);
return true;
}
Użyj array_unshift(); to pomoże uw dodanie elementu
'array_unshift()' WYKONUJE ponownie indeksować klawisze numeryczne. – Narf
tylko szybki notatkę, jeśli chcesz to wykorzystać w pętli ...
Jak stwierdzono tutaj: http://jp2.php.net/manual/en/function.array-unshift.php
array_unshift() wstawia przeszły elementy przód tablicy. Zwróć uwagę, że lista elementów jest traktowana jako całość, dlatego te elementy są w tej samej kolejności. Wszystkie klawisze tablicy numerycznej zostaną zmodyfikowane, aby rozpocząć odliczanie od zera, podczas gdy klawisze literalne nie zostaną dotknięte.
dać wyobrażenie o tym, jak wolno to, pisaliśmy jakiś punkt odniesienia kod (w oparciu o http://pastebin.com/Jad5TjsQ), a oto jak wygląda
[email protected]:~/dev/test$ for d in arrayFillBrackets.php arrayFillPush.php arrayFillUnshift.php arrayFillPushReverse.php ; do cat $d; php $d; done
<?php
require "benchmark.php";
function ArrayFillBrackets()
{
$result = array();
for($i = 0; $i < 10000; $i++) $result[] = $i;
return $result;
}
$result = array();
$result[10]['ArrayFillBrackets'] = Benchmark('ArrayFillBrackets', null, 10);
!!! Benchmarking function ArrayFillBrackets for 10 iteration (args:null)...
===================
Results:
===================
time total: 0.02686286
time min: 0.00198293
time max: 0.0058589
time avg: 0.002686286
memory total: 0
memory min: 0
memory max: 0
memory avg: 0
<?php
require "benchmark.php";
function ArrayFillPush()
{
$result = array();
for($i = 0; $i < 10000; $i++) array_push($result, $i);
return $result;
}
$result = array();
$result[10]['ArrayFillPush'] = Benchmark('ArrayFillPush', null, 10);
!!! Benchmarking function ArrayFillPush for 10 iteration (args:null)...
===================
Results:
===================
time total: 0.03958679
time min: 0.003757
time max: 0.00485086
time avg: 0.003958679
memory total: 0
memory min: 0
memory max: 0
memory avg: 0
<?php
require "benchmark.php";
function ArrayFillUnshift()
{
$result = array();
for($i = 0; $i < 10000; $i++) array_unshift($result, $i);
return $result;
}
$result = array();
$result[1]['ArrayFillUnshift'] = Benchmark('ArrayFillUnshift', null, 1);
!!! Benchmarking function ArrayFillUnshift for 1 iteration (args:null)...
===================
Results:
===================
time total: 3.62487912
time min: 3.62487912
time max: 3.62487912
time avg: 3.62487912
memory total: 0
memory min: 0
memory max: 0
memory avg: 0
<?php
require "benchmark.php";
function ArrayFillPushReverse()
{
$result = array();
for($i = 0; $i < 10000; $i++) array_push($result, $i);
return array_reverse($result);
}
$result = array();
$result[10]['ArrayFillPushReverse'] = Benchmark('ArrayFillPushReverse', null, 10);
!!! Benchmarking function ArrayFillPushReverse for 10 iteration (args:null)...
===================
Results:
===================
time total: 0.05071593
time min: 0.00475311
time max: 0.00560999
time avg: 0.005071593
memory total: 108
memory min: 0
memory max: 24
memory avg: 10.8
[email protected]:~/dev/test$
Proszę pamiętać, że wszystkie testy są 10 * 10000 , z wyjątkiem array_unshift, który uruchamia 1 * 10 000 (był dość zmęczony czekaniem) ... Więc znowu, nie używaj array_shift w iteracji, ponieważ odwracanie tablicy tylko raz kosztuje prawie nic.
Aby uniknąć ponownego indeksowania kluczy numerycznych, można po prostu dodać razem tablice.
Zamiast:
array_unshift($arr1, $arr2)
try:
$arr1 = $arr2 + $arr1;
Dobrze, jeśli robisz to, co robię i tworzenia wybierz formę wykorzystywania wyników z DB z indeksów są identyfikatory z DB tabeli, ale chcesz dodać "Any ..." do tablicy z indeksem 0, po prostu najpierw utworzyć zmienną tablicy z tym elementem, a następnie wypełnić pozostałe wartości z bazy danych. Nie ma potrzeby zmiany lub zmiany kolejności po wywołaniu bazy danych.
Dodanie własnej (nadmiarowej) odpowiedzi, ponieważ próbowałem edytować Martin's answer, używając jego oryginalnego przykładu, ale zostało odrzucone przez innych (nie Martin). Może nie przejrzeli historii jego odpowiedzi, ponieważ korzystam z jego oryginalnej tablicy przykładów i problemu. Oto moja odrzucona edycja.
Kevin Wentworth's answer jest poprawna. Rozszerzając tę odpowiedź za pomocą oryginalnego przykład z Martin's answer, jeśli masz tablicę
$a = [1 => a, 2 => b, 5 => e, 6 => f, 8 => h, 9 => i];
i chcesz wziąć trzy ostatnie elementy i poprzedzić je do tej samej tablicy, a następnie można wykonać następujące czynności.
$a = array_slice($a, -3, null, true) + $a;
Otrzymany tablica jest
array (6 => 'f', 8 => 'h', 9 => 'i', 1 => 'a', 2 => 'b', 5 => 'e',)
Uwagi
true
argument array_slice
konserwy przycisków numerycznych (bez takich parametrów istnieje array_unshift
).
Chociaż array_slice
nie usuwa niczego z oryginalnej tablicy, z powodu zachowania operatora +
na tablicach, ostatnie trzy elementy są anulowane.
Z Dokumenty do Operator + array operator
+ zwraca tablicę prawej dołączony do macierzy po lewej stronie; dla kluczy, które istnieją w obu tablicach, zostaną użyte elementy z lewej tablicy, a pasujące elementy z prawej tablicy zostaną zignorowane.
- 1. Dodawanie tablicy do istniejącej tablicy bez wywoływania nowego klucza
- 2. dodawanie tablicy do obiektu
- 3. Dodaj ciąg do początku tablicy łańcuchów
- 4. Zdobądź ostatni element tablicy bez zmiany tablicy w PHP?
- 5. Uzyskaj podzbiór tablicy na podstawie tablicy kluczy
- 6. Dodawanie do tablicy podczas iteracji
- 7. Javascript: Dodawanie do tablicy asocjacyjnej
- 8. jQuery - dodawanie elementów do tablicy
- 9. Dodawanie elementu do tablicy listy 2d w java
- 10. ASP.NET MVC3 - Dynamiczne dodawanie elementu do tablicy na obiekcie
- 11. Przesyłanie elementu DictionaryCollection do tablicy ciągów znaków
- 12. Jaka jest złożoność czasu dodawania elementu na początku tablicy ArrayList?
- 13. Gnuplot: dodawanie kluczy poza działkę bez zmiany rozmiaru działki
- 14. QML wiązanie do elementu tablicy
- 15. Dodawanie wyników bazy danych do tablicy
- 16. Utwórz hasz z tablicy kluczy
- 17. Modyfikowanie ostatniego elementu tablicy
- 18. zmiany długości tablicy w openjdk
- 19. Ustawienie wartości w wielowymiarowej tablicy przy użyciu tablicy kluczy
- 20. Element wypychający javascript na początku tablicy
- 21. Warunkowe wewnątrz elementu tablicy (...) skonstruować
- 22. Dynamiczne dodawanie wyrażeń filtru do tablicy
- 23. Dodawanie wartości do zmiennej tablicy VBA
- 24. Dodawanie do wielowymiarowej tablicy w PHP
- 25. Dodawanie metody Dodaj do tablicy ActiveRecord
- 26. Dodaj wartości dopasowanych kluczy w tablicy obiektów
- 27. KnockoutJS - Dodawanie obliczonych wartości obserwowanej tablicy
- 28. Koduje tablicy do JSON ciąg bez indeksów tablicy
- 29. Zmień klucz tablicy bez zlecenia
- 30. uzyskać drugi do ostatniego elementu tablicy?
Jak by to działało? Co jeśli masz przedmiot z kluczem '0'? –
Czy możesz podać przykład z tablicą, jakiego wejścia i wyjścia potrzebujesz –