PHP preg_filter () заменить в PHP <5.3? - PullRequest
0 голосов
/ 31 августа 2010

Пришлось развернуть некоторый код PHP на общем сервере только с PHP5.2.8.Весь код работает, КРОМЕ для вызова preg_filter(), который был добавлен в 5.3+ (и против которого был написан код).

Может кто-нибудь порекомендовать простую замену preg_filter() в PHP5.2?

1 Ответ

6 голосов
/ 31 августа 2010

В руководстве по PHP написано, что preg_filter() идентичен preg_replace(), за исключением того, что он возвращает только совпадения.

Таким образом, вы можете использовать комбинацию preg_replace и array_diff для получения результатов, таких как preg_filter в PHP 5.2.x.Сделайте это так:

<?php
$subject = array('1', 'a', '2', 'b', '3', 'A', 'B', '4'); 
$pattern = array('/\d/', '/[a-z]/', '/[1a]/'); 
$replace = array('A:$0', 'B:$0', 'C:$0'); 

$result = preg_replace($pattern, $replace, $subject);
var_dump($result);

//take difference of preg_replace result and subject
$preg_filter_similar = array_diff($result, $subject);

var_dump($preg_filter_similar);
?>

Это даст вывод (с установленным xDebug):

array
  0 => string 'A:C:1' (length=5)
  1 => string 'B:C:a' (length=5)
  2 => string 'A:2' (length=3)
  3 => string 'B:b' (length=3)
  4 => string 'A:3' (length=3)
  5 => string 'A' (length=1)
  6 => string 'B' (length=1)
  7 => string 'A:4' (length=3)
array
  0 => string 'A:C:1' (length=5)
  1 => string 'B:C:a' (length=5)
  2 => string 'A:2' (length=3)
  3 => string 'B:b' (length=3)
  4 => string 'A:3' (length=3)
  7 => string 'A:4' (length=3)

То же, что и preg_filter() output :

Array
(
    [0] => A:C:1
    [1] => B:C:a
    [2] => A:2
    [3] => B:b
    [4] => A:3
    [7] => A:4
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...