Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] array_merge_recursive print_r index echo
szachmat
post
Post #1





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 3.01.2016

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


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ć.

Ten post edytował szachmat 20.12.2017, 20:52:08
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
trzczy
post
Post #2





Grupa: Zarejestrowani
Postów: 460
Pomógł: 49
Dołączył: 5.06.2011

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


Co to znaczy "się wyciąga jeden index". Napisz co ma być zwrócone. Jedynka czy co...
Go to the top of the page
+Quote Post
szachmat
post
Post #3





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 3.01.2016

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


to samo co wyciąga się wink.gif

Go to the top of the page
+Quote Post
SmokAnalog
post
Post #4





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


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
Go to the top of the page
+Quote Post
sabat24
post
Post #5





Grupa: Zarejestrowani
Postów: 175
Pomógł: 26
Dołączył: 13.09.2007
Skąd: Gdańsk

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


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. });


Ten post edytował sabat24 21.12.2017, 12:50:00
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




@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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
SmokAnalog
post
Post #7





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


@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
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Jak dla mnie pytanie jest calkiem jasne i wyraznie widac co autor chce. tongue.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
SmokAnalog
post
Post #9





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


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'].
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 Aktualny czas: 22.08.2025 - 09:19