2011-10-18 13 views
0

こんにちは、私は透明な画像995x100pxと1000のURLのリストを持っています。 私はこのすべてのURLでイメージマップを作成したいと思います。 私は手でそれを行う方法を知っていますが、問題は1000個のURLがあるので、 1000個のランダムな座標を生成し、すべてのURLを飛行中に入れたいと思います。1000個のURLのリストでランダムなイメージマップ座標を生成

 <?php 
     $urls = array("www.link1.com", "www.link2.com " ,  "www.link3.com","www.link4.com"); 
shuffle($urls); // randomize the urls 

    // start the image map 
$map = <<<EOL 
<img src="links.png" width="998" height="100" border="0" usemap="#mymap" /> 
<map name="mymap"> 

EOL; 

$i = 0; 
for ($y = 0; $y = $y + 10; $y < 100) { 
for ($x = 0; $x = $x + 10; $x < 995) { 
    $bot_x = $x + 9; 
    $bot_y = $y + 9; 
    $map .= <<<EOL 
<area shape="rect" coords="{$x},{$y},{$bot_x},{$bot_y}" href="{$urls[$i]}" /> 

EOL; 
    $i++; 
} 
} 
$map .= <<<EOL 
</map> 

EOL; 

echo $map; 

?> 
+0

各URLは、イメージマップ内の独自の小さなクリッカブルポリゴンすべきですか? –

+0

はい、あなたは正しいです:) – user990024

答えて

0

だけ出力URLごとに1 <area>$xステップのために行きます。 $xが1行に最大値に達する場合は、$x0に再度設定し、$yを増やしてください。あなたはすべてのURLを処理してしまうまで続行:

$urls = array(/*... 1000 urls ... */); 
shuffle($urls); // randomize the urls 

// start the image map 
echo '<map name="mymap">'; 

// output all areas 
$area = 10; 
$width = 940; 
$aw = $area-1; // temp 
$iw = (int) $width/$area; 
foreach($urls as $i => $url) 
{ 
    $x = $area * ($i % $iw); 
    $y = $area * (int) ($i/$iw); 
    printf('<area shape="rect" coords="%d,%d,%d,%d" href="%s" />', $x, $y, $x+$aw, $y+$aw, $urlPrefix.$url); 
} 
// end the image map 
echo '</map>'; 

何の無限ループがないのでこれはメモリの問題にあなたに実行すべきではありませんし、それが直接に実行しないように、同様に役立ちますブラウザに出てecho'ingていますメモリの制限。

Demo

0
$urls = array(....); 
shuffle($urls); // randomize the urls 

// start the image map 
$map = <<<EOL 
<map name="mymap"> 

EOL; 

$i = 0; 
for ($y = 0; $y = $y + 10; $y < 100) { 
    for ($x = 0; $x = $x + 10; $x < 995) { 
     $bot_x = $x + 9; 
     $bot_y = $y + 9; 
     $map .= <<<EOL 
    <area shape="rect" coords="{$x},{$y},{$bot_x},{$bot_y}" href="{$urls[$i]}" /> 

EOL; 
     $i++; 
    } 
} 
$map .= <<<EOL 
</map> 

EOL; 

echo $map; 
+0

私は間違ったものを作ったと思います。$ urls = array( "www.link1.com"、 "www.link2.com"、 "www.link3 .com "、 " www.link4.com "); – user990024

+0

サーバのログを見て、500の理由を確認してください。 –

+0

私は何が起こっているのかを見るために.php5拡張を置いて、私はこのエラーを受け取る致命的なエラー:メモリ不足(30408704割り当てられている) – user990024

関連する問題