「一気に最後まで読んだ」本、教えて下さい!

質問の背景は下記でのsprintf関数での%Sについてです。

https://developers.google.com/maps/articles/phps …

上記での流れは、添付画像のように、
・住所を入力することで 緯度経度が算出され、(center.lat() center.lng())
・また、半径('radiusSelect)が選択(この場合は20Km)されることで、
・選択住所(center.lat() center.lng())から選択半径内の登録店舗がgooglemapに表示される。
というものです。

(1)<「phpsqlsearch_genxml.php」に選択値を渡す。>(62行目)
var radius = document.getElementById('radiusSelect').value;
var searchUrl = 'phpsqlsearch_genxml.php?lat=' + center.lat() + '&lng=' + center.lng() + '&radius=' + radius;

(※ 例えばcenter.lat()を緯度37 center.lng()を経度-122とします)

(2)<「phpsqlsearch_genxml.php」において、該当する店舗を見つけ出す。>
// Get parameters from URL
$center_lat = $_GET["lat"];
$center_lng = $_GET["lng"];
$radius = $_GET["radius"];
   ・・・・・・
// Search the rows in the markers table
$query = sprintf("SELECT address, name, lat, lng, ( 6371 * acos( cos( radians('%s') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('%s') ) + sin( radians('%s') ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < '%s' ORDER BY distance LIMIT 0 , 200",
mysql_real_escape_string($center_lat),
mysql_real_escape_string($center_lng),
mysql_real_escape_string($center_lat),
mysql_real_escape_string($radius));
$result = mysql_query($query);

(※ ( 6371 * acos( cos( radians('%s') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('%s') ) + sin( radians('%s') ) * sin( radians( lat )は中心地からの半径を求める公式)

上記(2)で書式指定(string)の%Sが使用されていますが、そこには下記数値文字が入ります。

SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < 20

同じ%Sに対してそれぞれ、37・-122・20の異なった数値文字が対応される仕組みが分かりません。

ご教示お願いいたします。

「sprintf関数での%Sが分かりません」の質問画像

A 回答 (2件)

関数の動作に疑問を持ったならば、まずマニュアルを読みましょう。


http://www.php.net/manual/ja/function.sprintf.php
上記を読んでもわからなければどのあたりがわからないかを補足願います。

(以下、独り言)
しかし、大本の printf() の記述がスカスカで、そっちよりもこっちの記述が充実してるのはどういう事なんだろう?

この回答への補足

hitomuraさん、ありがとうございます。
下記見させていただきました。
http://www.php.net/manual/ja/function.sprintf.php

そうすると、下記にある

$query = sprintf("SELECT address, name, lat, lng, ( 6371 * acos( cos( radians('%s') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('%s') ) + sin( radians('%s') ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < '%s' ORDER BY distance LIMIT 0 , 200",

の4つの'%s'は

(1)
mysql_real_escape_string($center_lat),
mysql_real_escape_string($center_lng),
mysql_real_escape_string($center_lat),
mysql_real_escape_string($radius));

の4つの置換指示子として、(1)の順番とおりの引数(数値文字)が'%s'に入る。という理解でよろしいのでしょうか。

補足日時:2014/06/04 13:00
    • good
    • 0

> そうすると、下記にある


 (中略)
> の4つの'%s'は
>
> (1)
> mysql_real_escape_string($center_lat),
> mysql_real_escape_string($center_lng),
> mysql_real_escape_string($center_lat),
> mysql_real_escape_string($radius));
>
> の4つの置換指示子として、(1)の順番とおりの引数(数値文字)が'%s'に入る。という理解でよろしいのでしょうか。
その理解で正しいです。
    • good
    • 0
この回答へのお礼

このたびは本当にありがとうございました。

お礼日時:2014/06/05 18:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報