<?php
$array = [
'car_porsche',
'caravan',
'car',
'motorcycle_suzuki',
'motorcycle_carabela',
];
$search = 'car';
function keepIfStartsWith_regex(array $haystack, string $needle): array {
return preg_grep('/^' . preg_quote($needle, '/') . '/', $haystack);
}
function removeIfStartsWith_regex(array $haystack, string $needle): array {
return preg_grep('/^' . preg_quote($needle, '/') . '/', $haystack, PREG_GREP_INVERT);
}
function keepIfStartsWith_PHP8(array $haystack, string $needle): array {
return array_filter($haystack, fn($v) => str_starts_with($v, $needle));
}
function removeIfStartsWith_PHP8(array $haystack, string $needle): array {
return array_filter($haystack, fn($v) => !str_starts_with($v, $needle));
}
function keepIfStartsWith_PHP7_4(array $haystack, string $needle): array {
return array_filter($haystack, fn($v) => strpos($v, $needle) === 0);
}
function removeIfStartsWith_PHP7_4(array $haystack, string $needle): array {
return array_filter($haystack, fn($v) => strpos($v, $needle) !== 0);
}
function keepIfStartsWith_sub7_4(array $haystack, string $needle): array {
return array_filter($haystack, function($v) use($needle) { return strpos($v, $needle) === 0; });
}
function removeIfStartsWith_sub7_4(array $haystack, string $needle): array {
return array_filter($haystack, function($v) use($needle) { return strpos($v, $needle) !== 0; });
}
$functions = [
'keepIfStartsWith_regex',
'removeIfStartsWith_regex',
'keepIfStartsWith_PHP8',
'removeIfStartsWith_PHP8',
'keepIfStartsWith_PHP7_4',
'removeIfStartsWith_PHP7_4',
'keepIfStartsWith_sub7_4',
'removeIfStartsWith_sub7_4',
];
foreach ($functions as $fn) {
echo "$fn: " . json_encode(array_values($fn($array, $search))) . "\n";
}
- Output for 8.0.1 - 8.0.30, 8.1.0 - 8.1.33, 8.2.0 - 8.2.29, 8.3.0 - 8.3.25, 8.4.1 - 8.4.12
- keepIfStartsWith_regex: ["car_porsche","caravan","car"]
removeIfStartsWith_regex: ["motorcycle_suzuki","motorcycle_carabela"]
keepIfStartsWith_PHP8: ["car_porsche","caravan","car"]
removeIfStartsWith_PHP8: ["motorcycle_suzuki","motorcycle_carabela"]
keepIfStartsWith_PHP7_4: ["car_porsche","caravan","car"]
removeIfStartsWith_PHP7_4: ["motorcycle_suzuki","motorcycle_carabela"]
keepIfStartsWith_sub7_4: ["car_porsche","caravan","car"]
removeIfStartsWith_sub7_4: ["motorcycle_suzuki","motorcycle_carabela"]
preferences:
96.11 ms | 408 KiB | 5 Q