Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Filtrowanie tablicy według klucza
Shadowsword
post 30.06.2009, 10:09:36
Post #1





Grupa: Zarejestrowani
Postów: 149
Pomógł: 5
Dołączył: 9.04.2008
Skąd: W-WA

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


Witam!

Nie wiem, czy to czego szukam jest aż tak malo popularne, że tego nigdzie nie ma, czy po prostu ja nie umiem szukać...

Mam wielowymiarową tablice ze stringami w kluczach. Chciałbym w niej zostawić tablice w których kluczu znajdzie się dany ciąg znaków. Dokładnie chodzi mi o coś takiego jak array_filter tutaj:

Cytat
Description:
Return array of matching values from array using regular expression.
<?php
class array_ereg {
  function array_ereg($pattern) { $this->pattern = $pattern; }
  function ereg($string) {
  return ereg($this->pattern, $string);
  }
}
?>
Usage :
<?php
  $matches = array_filter($subject, array(new array_ereg($pattern), 'ereg'));
?>
Example: 
 <?php
  $subject = array ("Thumbs.db", "image001.png", "image001.jpg", "image002.png");
  print_r(array_filter($subject, array(new array_ereg("image[0-9]{3}\.png"), 'ereg')));
?>
Outputs:
  Array ( [1] => image001.png [3] => image002.png )



Tylko, żeby nie brało pod uwagę zawartości tylko klucz.


--------------------
Go to the top of the page
+Quote Post
Kabraxis
post 30.06.2009, 11:25:26
Post #2





Grupa: Zarejestrowani
Postów: 81
Pomógł: 2
Dołączył: 28.03.2003

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


http://pl.php.net/manual/pl/control-structures.foreach.php
http://pl.php.net/manual/pl/function.array-walk.php
http://pl.php.net/manual/pl/function.array-keys.php

Może coś z tego Cię satysfakcjonuje?
Go to the top of the page
+Quote Post
Shadowsword
post 30.06.2009, 18:02:07
Post #3





Grupa: Zarejestrowani
Postów: 149
Pomógł: 5
Dołączył: 9.04.2008
Skąd: W-WA

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


Niestety nie. To array keys wyglądało ciekawie, ale chyba jednak nie da rady tym zrobić. Foreach zupełnie odpada a to array walk to chyba podobnie jak foreach działa z tego co zrozumiałem.


--------------------
Go to the top of the page
+Quote Post
Kabraxis
post 30.06.2009, 18:06:15
Post #4





Grupa: Zarejestrowani
Postów: 81
Pomógł: 2
Dołączył: 28.03.2003

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


Dlaczego? Da się to zrobić używając dowolnej z tych funkcji. To tylko kwestia wybrania tej, która bardziej Ci odpowiada, a nie tej którą się da.

Rzecz jasna musisz to połączyć z preg_match lub preg_replace_callback.

Ten post edytował Kabraxis 30.06.2009, 18:08:50
Go to the top of the page
+Quote Post
Shadowsword
post 30.06.2009, 18:20:06
Post #5





Grupa: Zarejestrowani
Postów: 149
Pomógł: 5
Dołączył: 9.04.2008
Skąd: W-WA

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


W sumie to nie potrzebuje żadnego z tych 3 co podałeś wyżej, wystarczy samo preg_match. Wielkie dzięki smile.gif


--------------------
Go to the top of the page
+Quote Post
wookieb
post 30.06.2009, 18:34:26
Post #6





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




A ja bym zastosował inny sposób. Skoro nie ma funkcji typu array_filter na kluczach to zrób
http://php.net/array_flip

przefiltruj a potem znowu odwróć.


--------------------
Go to the top of the page
+Quote Post
Shadowsword
post 30.06.2009, 18:54:36
Post #7





Grupa: Zarejestrowani
Postów: 149
Pomógł: 5
Dołączył: 9.04.2008
Skąd: W-WA

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


Tablica jest wielowymiarowa, więc pojawia mi się taki błąd
Cytat
Can only flip STRING and INTEGER values! in /****/tablica.php on line 51

Ale pomysł ciekawy ^^.


--------------------
Go to the top of the page
+Quote Post
wookieb
post 30.06.2009, 18:56:18
Post #8





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Wiec najlepszym twoim rozwiazaniem jest zwykly foreach i call_user_func badz nawet bez tego. Możliwości jest mnóstwo.


--------------------
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: 23.06.2025 - 01:35