Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Filtracja tablicy na podstawie drugiej, array_intersect
markonix
post 24.02.2013, 21:55:41
Post #1





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


Korzystam z ActiveRecords i chciałbym filtrować tablice danych przez wykonaniem INSERT / UPDATE aby wyszukać kolumny które nie istnieją w tabeli.

Zastanawiam się czy jest coś wbudowanego w PHP.

Mam tablice $columns = array('id', 'name'); oraz $data = array('id' => '1', 'name' => 'abc', 'submit' => 'wyślij');

Jak widać formularz wysłał też wartość przycisku i jeżeli wstawię bezpośrednio do zapytania mam error.

Oczywiście prosta pętla załatwi sprawę ale:
1) czy ogólnie może ktoś ma zastrzeżenia co do samego rozwiązania?
2) no i co do samego problemu może jest już jakaś funkcja w PHP, znalazłem array_intersect ale nie zadziała dla zwykłej tablicy i asocjacyjnej?

Ten post edytował markonix 24.02.2013, 21:58:39


--------------------
Go to the top of the page
+Quote Post
nospor
post 24.02.2013, 21:59:43
Post #2





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




Cytat
Jak widać formularz wysłał też wartość przycisku i jeżeli wstawię bezpośrednio do zapytania mam error.
A kto ci kaze ten submit wkładać do tablicy z danymi? Nie kumam...


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

"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
markonix
post 24.02.2013, 22:18:28
Post #3





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


Specjalnie dałem "submit" aby można się było domyśleć..
Dane lecą bezpośrednio z formularza.


--------------------
Go to the top of the page
+Quote Post
ano
post 24.02.2013, 22:22:16
Post #4





Grupa: Zarejestrowani
Postów: 435
Pomógł: 40
Dołączył: 16.02.2003
Skąd: Wrocław

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


Najprościej:
  1. $columns = array('id', 'name');
  2. $data = array('id' => '1', 'name' => 'abc', 'submit' => 'wyślij');
  3.  
  4. $columns = array_flip($columns);
  5. $filtered = array_intersect_key($data, $columns);
  6.  
  7. // i teraz $filtered = array('id' => '1', 'name' => 'abc';


Ten post edytował ano 24.02.2013, 22:23:02


--------------------
Linkedin | ...
Go to the top of the page
+Quote Post
markonix
post 24.02.2013, 22:27:28
Post #5





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


Tak, też sprytne rozwiązanie. Choć dwie operacje to już pewnie wydajnościowo będzie zbliżone do foreach filtrującego.


--------------------
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 - 00:06