PHP: создать URL, закодированный, пока значение существует в мультимассиве

Моя цель:

Если значение в этих массивах совпадает с расширением файла, тогда я могу создать красивую строку в кодировке URL, которую я могу добавить к URL, используя http_build_query() функция. Если совпадений не найдено, ничего не возвращается.

Я попробовал это всеми возможными способами, и это не работает, как показано ниже. Можете ли вы проверить, какая часть не так?

$name = 'myfile.mp4';

$list = array(
'video' => array('3gp', 'mkv', 'mp4'),
'photo' => array('jpg', 'png', 'tiff')
);

// File Ext Check
$ext = (strpos($name, '.') !== false) ? strtolower(substr(strrchr($name, '.'), 1)) : '';

$type = null;
$find = $ext;

array_walk($list, function ($k, $v) use ($find, &$type)
{
if (in_array($find, $k))
{
$type = $v;
$data = array();

switch ($type)
{
case 'video':
$data['title'] = 'video';
$data['description'] = 'my video';
break;
case 'photo':
$data['title'] = 'photo';
$data['description'] = 'my photo';
break;
}
}
else {
echo "not both!.";
exit;
{
});if ($type == 'video') {
$link = 'https://www.video.com' . http_build_query($data);
}
else
if ($type == 'photo') {
$link = 'https://www.photo.com' . http_build_query($data);
}

echo $link;

Спасибо…

1

Решение

Вы $data установлен в array_walk() сфера, но из array_walk() область не определена. Так что в http_build_query($data), Вот $data не определил.

Вы можете ссылаться на $data в use()затем после array_walk()Вы можете использовать его значение. В вашем коде вы используете in_array() чтобы проверить тип файла в списке, для производительности я рекомендую вам увидеть это сообщение.

0

Другие решения

Других решений пока нет …