Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] array_merge_recursive print_r index echo
Forum PHP.pl > Forum > Przedszkole
szachmat
Hejka,
może ktoś wie, jak się wyciąga jeden index z tego cholerstwa, np. ten, gdzie dwie wartości równe są 1?
Jest to wynik łączenia dwóch tablic rekurencyjnie za pomocą funkcji array_merge_recursive
i teraz chciałbym się trochę pobawić kluczem [hobby], dlatego chciałbym go w pierwszej kolejności wyświetlić.
No i próbuję, no ale, że jestem cienki, nicość

  1. $przeznaczenie = array_merge_recursive($cechy_profilu_on, $cechy_profilu_ona);
  2. print_r($przeznaczenie);


  1.  
  2. Array (
  3. [płeć] => Array ( [0] => 0 [1] => 0 )
  4. [wykształcenie] => Array ( [0] => 0 [1] => 0 )
  5. [zawód] => Array ( [0] => 0 [1] => 0 )
  6. [ulubiony_kolor] => Array ( [0] => 0 [1] => 0 )
  7. [hobby] => Array ( [0] => 1 [1] => 1 ) // potrzebuję to wyświetlić
  8. [sport] => Array ( [0] => 0 [1] => 0 )
  9. [poglądy_polityczne] => Array ( [0] => 0 [1] => 0 )
  10. [rodzina] => Array ( [0] => 0 [1] => 0 ) )


to już jest tablica wielowymiarowa i powinny odnosić się do niej zasady jak do tablic wielowymiarowych, ale nie mogę się w tym połapać.
trzczy
Co to znaczy "się wyciąga jeden index". Napisz co ma być zwrócone. Jedynka czy co...
szachmat
to samo co wyciąga się wink.gif

SmokAnalog
Co dokładnie chcesz tu zrobić? Domyślam się, że to jest jakiś skrypt do portalu randkowego i dopasowujesz pary kryteriami? Opisz co robisz, bo może array_merge_recursive wcale nie jest najlepszym rozwiązaniem?

No ale odpowiadając na Twoje pytanie małpio:

  1. echo $przeznaczenie['hobby'][0]; // hobby w $cechy_profilu_on
  2. echo $przeznaczenie['hobby'][1]; // hobby w $cechy_profilu_ona
sabat24
Zakładam, że chodzi o znalezienie trafień (matches) - czyli wyświetl te klucze, gdzie są same 1 z dwóch zmiennych. Moim zdaniem powineneś użyć: array_uintersect_assoc na zmiennych $cechy_profilu_on, $cechy_profilu_ona

  1. $on = array ('hobby' => 1, 'praca' => 0);
  2. $ona = array ('podroze' => 1, 'hobby' => 1, 'praca' => 0);
  3. $result = array_uintersect_assoc($on, $ona, function($a, $b) {
  4. return empty($a) AND empty($b);
  5. });
nospor
@SmokAnalog przeciez on wpierw musi znalezc ze to hooby jest wspolne dla obu....

zwykle array_filter i po sprawie

  1. $przeznaczenie = array_filter(array_merge_recursive($cechy_profilu_on, $cechy_profilu_ona), function($para){
  2. return !empty($para[0]) && !empty($para[1]);
  3. });
  4.  
  5. print_r($przeznaczenie);

To ci zwroci tylko te parametry, ktore sa w obu tablicach
SmokAnalog
@nospor nie chciałem tak zgadywać co on chce. Pytał jak wyciągnąć indeks, więc jak mniemam nie za dobrze wie, co robi.

A co do wyciągania wspólnych cech, to bardziej elegancko będzie tak:

  1. $przeznaczenie = array_uintersect_assoc($cechy_profilu_on, $cechy_profilu_ona, function ($cecha_on, $cecha_ona) {
  2. return !($cecha_on && $cecha_ona);
  3. });


Jedno array_uintersect_assoc zamiast pary array_merge_recursive i array_filter. Po drugie, kończymy z jedną wartością w tablicy na każdą cechę, a nie dwiema. Po trzecie, w przypadku nieistniejących cech w którejś tablicy, nie mamy błędu. (chociaż kto wie, może błąd jest wskazany)

Pytanie jest niedoprecyzowane i tak się możemy bawić w zgaduj-zgadulę. smile.gif
nospor
Jak dla mnie pytanie jest calkiem jasne i wyraznie widac co autor chce. tongue.gif
SmokAnalog
W sumie chyba masz rację. Kiedy pierwszy raz czytałem to pytanie, to wydawało mi się, że indeks odnosi się do numerycznego klucza.

Jeśli chodzi o wyciąganie po prostu nazw wspólnych cech, to najprościej chyba tak jak mówiłem plus array_keys:

  1. $wspolne_cechy = array_keys(array_uintersect_assoc($cechy_profilu_on, $cechy_profilu_ona, function ($cecha_on, $cecha_ona) {
  2. return !($cecha_on && $cecha_ona);
  3. }));


W ten sposób $wspolne_cechy będzie tablicą ze wszystkimi cechami, gdzie jest 1 i 1, czyli w Twoim przypadku to będzie jednoelementowa tablica ['hobby'].
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.