Моя цель:
Если значение в этих массивах совпадает с расширением файла, тогда я могу создать красивую строку в кодировке 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;
Спасибо…
Вы $data
установлен в array_walk()
сфера, но из array_walk()
область не определена. Так что в http_build_query($data)
, Вот $data
не определил.
Вы можете ссылаться на $data
в use()
затем после array_walk()
Вы можете использовать его значение. В вашем коде вы используете in_array()
чтобы проверить тип файла в списке, для производительности я рекомендую вам увидеть это сообщение.
Других решений пока нет …