Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: array_merge - jak nadpisać klucz liczbowy?
Forum PHP.pl > Forum > PHP
starach
Witam.
  1. <?php
  2. $arr1 = array('kolor' => 'zielony', 1 => 'jeden');
  3. $arr2 = array('kolor' => 'rozowy', 1 => 'jedyneczka');
  4. ?>
Funkcja array_merge() zwróci tablicę o strukturze:
Kod
Array
(
    [kolor] => rozowy
    [0] => jeden
    [1] => jedyneczka
)
Jak widać funkcja zamiast nadpisywać zmienia indeksy i zostawia wartości o takich samy kluczach liczbowych.
Co zrobić aby wartości z indeksami liczbowymi zostały nadpisane tak jak to się stało z wartościami o indeksie 'kolor' ?
delfinium
Może to Ci pomoże:

  1. <?php
  2. array_intersect_key( $arr2, $arr1 );
  3. ?>


tylko zwróć uwagę, że kolejność argumentów jest ważna.


Uzupełnienie:

Dla przypadku, który podałeś to rozwiązanie się sprawdzi ale jeśli będą różne klucze w tablicach to będzie źle.

Spróbowałem inną metodę biggrin.gif (kolejność też jest ważna)
  1. <?php
  2. $arr1 = array('kolor' => 'zielony', 1 => 'jeden', 'x' => 12 );
  3. $arr2 = array('kolor' => 'rozowy', 1 => 'szesc', 'y' => 10 );
  4. $arr3 = $arr2 + $arr1;
  5. ?>


i wynik jest taki jak chciałeś

  1. Array ( [kolor] => rozowy [1] => szesc [y] => 10 [x] => 12 )
starach
Oczywiście że pomoże dzięki tej funkcji szukałem tylko nie mogłem ...
myśl mi się urwała bo pomyślałem teraz że skoro i tak muszę pobierać klucze to chyba łatwiej będzie zastosować od razu do całej tablicy foreach(),
zamiast używać na raz array_merge() i array_intersect_key() ...
ehh zdaje się że czekają mnie kolejne testy wydajności
Co o tym sądzisz ?
delfinium
Nie używaj array_merge a potem array_intersect_key bo jak wcześniej napisałem zadziała ona tylko w przypadku identycznych kluczy w tablicach, pozostałe pominie.

Użyj zwykłego dodawania $arr2 + $arr1 a potem to już normalnie: foreach
starach
Dobra dzięki oczywiście nie wiedziałem że na tablicach można używać operatorów arytmetycznych. :|
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.