PHP: 构建一个 URL 编码,而值存在于多数组中

PHP: Build a URL encoded while a value exists in multi array

我的目标是:

如果这些数组中的值与文件的扩展名匹配,那么我可以构建一个漂亮的 URL 编码字符串,我可以使用 http_build_query() 将其附加到 url功能。如果找不到匹配项,则 return 没有。

各种方法都试过了,还是不行,如下代码。你能检查一下哪部分是错的吗?。

$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还没有定义

您可以在use()中引用$data,然后在array_walk()之后,您可以使用它的值。在您的代码中,您使用 in_array() 检查列表中的文件类型,为了提高性能,我建议您查看此 .