1

私の目標は:

これらの配列の値がファイルの拡張子と一致する場合、http_build_query()関数を使用して URL に追加できる、適切な 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

あなた$dataarray_walk()スコープ内に設定されていますが、array_walk()スコープ外は定義されていません。ではhttp_build_query($data)、here$dataは定義されていません。

でを参照$dataし、 のuse()後にarray_walk()その値を使用できます。コードin_array()では、リスト内のファイル タイプをチェックするために使用します。パフォーマンスのために、この投稿を参照することをお勧めします。

于 2016-12-25T08:36:39.757 に答える