Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> array_merge - jak nadpisać klucz liczbowy?, MAN: "późniejsza wartość nie nadpisze starszej, lecz zostanie dop
starach
post 14.07.2007, 10:33:53
Post #1





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

Ostrzeżenie: (0%)
-----


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' ?
Go to the top of the page
+Quote Post
delfinium
post 14.07.2007, 11:00:12
Post #2





Grupa: Zarejestrowani
Postów: 90
Pomógł: 6
Dołączył: 30.06.2007
Skąd: Zielona Góra

Ostrzeżenie: (0%)
-----


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 )


Ten post edytował delfinium 14.07.2007, 11:25:31
Go to the top of the page
+Quote Post
starach
post 14.07.2007, 11:33:00
Post #3





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

Ostrzeżenie: (0%)
-----


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 ?
Go to the top of the page
+Quote Post
delfinium
post 14.07.2007, 11:36:22
Post #4





Grupa: Zarejestrowani
Postów: 90
Pomógł: 6
Dołączył: 30.06.2007
Skąd: Zielona Góra

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
starach
post 14.07.2007, 12:22:49
Post #5





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

Ostrzeżenie: (0%)
-----


Dobra dzięki oczywiście nie wiedziałem że na tablicach można używać operatorów arytmetycznych. :|
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 18.06.2025 - 18:37