1

我的目标是:

如果这些数组中的值与文件的扩展名匹配,那么我可以构建一个很好的 URL 编码字符串,我可以使用该http_build_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;

谢谢...

4

1 回答 1

0

$data是在array_walk()范围内设置的,但在array_walk()范围外是没有定义的。所以在http_build_query($data),这里$data没有定义。

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

于 2016-12-25T08:36:39.757 回答