PHP:在多数组中存在值时构建一个编码的URL

PHP:在多数组中存在值时构建一个编码的URL,php,arrays,array-walk,Php,Arrays,Array Walk,我的目标是: 如果这些数组中的值与文件的扩展名匹配,那么我可以构建一个漂亮的URL编码字符串,我可以使用http\u build\u query()函数将其附加到URL。如果未找到匹配项,则不返回任何内容 我已经尝试了所有可能的方法,但没有成功,如下代码所示。你能检查一下哪一部分错了吗 $name = 'myfile.mp4'; $list = array( 'video' => array('3gp', 'mkv', 'mp4'), 'photo' => ar

我的目标是:

如果这些数组中的值与文件的扩展名匹配,那么我可以构建一个漂亮的URL编码字符串,我可以使用
http\u build\u query()
函数将其附加到URL。如果未找到匹配项,则不返回任何内容

我已经尝试了所有可能的方法,但没有成功,如下代码所示。你能检查一下哪一部分错了吗

$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
设置在
数组\u walk()
范围内,但未定义
数组\u walk()
范围外。因此在
http\u build\u查询($data)
中,这里没有定义
$data


您可以在
use()
中引用
$data
,然后在
array\u walk()
之后,可以使用其值。在您的代码中,您使用
In_array()
检查列表中的文件类型,为了性能,我建议您查看此信息。

的$data
设置在
array_walk()
范围内,但未定义
array_walk()
范围之外。因此在
http\u build\u查询($data)
中,这里没有定义
$data


您可以在
use()
中引用
$data
,然后在
array\u walk()
之后,可以使用其值。在您的代码中,您可以使用
In_array()
检查列表中的文件类型,为了提高性能,我建议您查看此信息。

您好,推荐链接中的所有方法都有效。非常感谢。但是,我仍然不知道如何使
array\u walk()
在上述条件下工作。我想了解和探索它。你能给我一个确切的答案吗?.从array_walk()中初始化$data,然后调用array_walk($list,function($k,$v)use($find,&$type,&$data));大家好,推荐链接上的所有方法都是works。非常感谢。但是,我仍然不知道如何使
array\u walk()
在上述条件下工作。我想了解和探索它。你能给我一个确切的答案吗?.从array_walk()中初始化$data,然后调用array_walk($list,function($k,$v)use($find,&$type,&$data));