Похоже, у вас есть простой массив, поэтому здесь есть альтернатива, которая фильтрует массив с помощью регулярного выражения на ключах.
// Matches only immediate files of ahostel.lt/img/
$pattern = '#^ahostel\.lt/img/[^/]+\.[^/]+$#D';
$keys = preg_grep($pattern, array_keys($array));
$items = array_intersect_key($array, array_flip($keys));
Другой способ, поскольку итераторы - это круто без написания сделанного на заказ будет использовать RegexIterator
для фильтрации ключей.Затем вы просто зациклились на отфильтрованном итераторе или использовали iterator_to_array()
, чтобы получить массив, содержащий только отфильтрованные значения.
$items = new RegexIterator(
new ArrayIterator($array),
'#^ahostel\.lt/img/[^/]+\.[^/]+$#D',
RegexIterator::MATCH,
RegexIterator::USE_KEY
);
Существует несколько разных способов использованияили создайте итерационную фильтрацию, даже используя что-то вроде fnmatch()
в методе accept()
FilterIterator
, чтобы использовать шаблоны с подстановочными знаками, такие как glob()
.
class GlobKeyFilterIterator extends FilterIterator
{
protected $pattern;
public function __construct(Iterator $it, $pattern)
{
$this->pattern = $pattern;
parent::__construct($it);
}
public function accept()
{
return fnmatch($this->pattern, $this->key(), FNM_PATHNAME);
}
}
$items = new GlobKeyFilterIterator(
new ArrayIterator($array),
'ahostel.lt/img/*.*'
);