Jak przefiltrować tablicę po ciągach pasujących do wyrażenia?

Jak przefiltrować tablicę po ciągach pasujących do wyrażenia?
SH
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 38
0

jak z tablicy powiedzmy:

Kopiuj
$arr = array('111111 (xxxx)', '222222 (xxxx) (yyy)', '3333333', '4444444 (xxxx) (yyy)', '555555', '666666 (xxxx)');

wyswietlic tylko wartosci zawierajace elementy "(xxxx) (yyy)", czyli element: "222222 (xxxx) (yyy)" i "4444444 (xxxx) (yyy)".
Myślałem o pętli na przykład z preg_match(), tylko jak dokładnie musiało by to wyglądać ?

Riddle
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10307
2

Ale to ma być konkretnie "(xxxx) (yyy)?? Czy to jest jakiś format, typu: cztery znaki w nawiasie, spacja, trzy znaki w nawiasie?

Zacznij od zdefiniowania funkcji, która sprawdza czy jedno ze słów pasuje do wzorca:

Kopiuj
<?php

function stringMatches(string $subject): bool {
  return \strPos($subject, "(xxxx) (yyy)") > -1; // jeśli to ma być konkretne słowo
 
  return \preg_match("/\(.{4}\) \(.{3}\)/", $subject); // jeśli to ma być wzorzec
}

A następnie użyj tej funkcji żeby przefiltrować Twoją tablicę, np tak:

Kopiuj
$newArray = \array_filter($arr, 'stringMatches');

ewentualnie

Kopiuj
$newArray = \array_filter($arr, function (string $element): bool {
  return stringMatches($element);
});
SH
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 38
0

(xxxx) - to data, konkretnie rok, czyli 4 cyfry, natomiast (yyy) to trzy litery. oczywiście jedno i drugie w nawiasach

delikatnie zmieniłem na: ~\([0-9]{4}\) \([a-z]{3}\)~ i działą, dzięki serdeczne :)

ZA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 29
0

Napisz foreach i bez regexow to obsłuż.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.