У меня есть два массива с почти той же структурой.Найти значение массива с помощью ключей из другого массива
Первый массив - это данные $_POST
, а второй содержит правила регулярных выражений и некоторые другие вещи для проверки данных.
Пример:
$data = array(
'name' => 'John Doe',
'address' => array(
'city' => 'Somewhere far beyond'
)
);
$structure = array(
'address' => array(
'city' => array(
'regex' => 'someregex'
)
)
);
Теперь я хочу, чтобы проверить
$data['address']['city'] with $structure['address']['city']['regex']
или
$data['foo']['bar']['baz']['xyz'] with $structure['foo']['bar']['baz']['xyz']['regex']
Любые идеи, как добиться этого с помощью функции PHP?
Редактировать: Кажется, я нашел решение самостоятельно.
$data = array(
'name' => 'John Doe',
'address' => array(
'city' => 'Somewhere far beyond'
),
'mail' => '[email protected]'
);
$structure = array(
'address' => array(
'city' => array(
'regex' => 'some_city_regex1',
)
),
'mail' => array(
'regex' => 'some_mail_regex1',
)
);
function getRegex($data, $structure)
{
$return = false;
foreach ($data as $key => $value) {
if (empty($structure[$key])) {
continue;
}
if (is_array($value) && is_array($structure[$key])) {
getRegex($value, $structure[$key]);
}
else {
if (! empty($structure[$key]['regex'])) {
echo sprintf('Key "%s" with value "%s" will be checked with regex "%s"', $key, $value, $structure[$key]['regex']) . '<br>';
}
}
}
return $return;
}
getRegex($data, $structure);
Одно слово: рекурсия – Barmar
Да. Я пытаюсь и стараюсь и чувствую себя все глупо. :/ – TeK
Опубликуйте то, что вы пробовали, чтобы мы могли показать, где вы поступили неправильно. Мы не собираемся писать все для вас. – Barmar