Есть массив вида
$array = [
'name' => 'Имя',
'surname' => 'Фамилия',
'phone1' => '+79091111111',
'phone2' => '+79092222222'
];
Количество элементов с ключами начинающимися на phone неизвестно. Как можно выбрать все такие элементы?
Стандартная функция array_filter осуществляет фильтрацию массива, используя функцию обратного вызова, которая может принимать либо значения, либо значения и ключи.
Внутри функции вам требуется определить, подходит вам текущий ключ или нет. Способов определить, начинается ли строка с искомой не мало.
$result = array_filter($data, function($v, $k){
return strpos($k, "phone") === 0;
}, ARRAY_FILTER_USE_BOTH);
Как вариант:
$array = [
'name' => 'Имя',
'surname' => 'Фамилия',
'phone1' => '+79091111111',
'phone2' => '+79092222222'
];
$result = preg_grep('/phone\d+/', array_keys($array));
foreach ($array as $key => $value)
{
if (!in_array($key, $result))
unset($array[$key]);
}
print_r($array);
Или же такой вариант:
$r = array_intersect_key($array, array_flip(preg_grep('/phone\d+/', array_keys($array))));
print_r($r);
$array = [
'name' => 'Имя',
'surname' => 'Фамилия',
'phone1' => '+79091111111',
'phone2' => '+79092222222'
];
$search = 'phone';
foreach ($array as $key => $value)
{
if($search == substr($key,0,strlen($search)))
$result[] = $value
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей