ホームページ  >  記事  >  バックエンド開発  >  PHPコードのip2longループの問題

PHPコードのip2longループの問題

WBOY
WBOYオリジナル
2016-06-23 13:38:53998ブラウズ

print_r($dataIp);            foreach ($dataIp as $key=>$value) {                $data['ip']     =   $value;                $data['iplong']     =   bindec(decbin(ip2long($value)));                                            print_r($data);                         }


出力結果は次のようになります:

Array
(
[0] => 208.104.70.215
[1] => 74.101.176.171
[2] => 73.17. 0
[3] = > ; 70.198.197.3
[4] => 46.44.179.76
)
====
配列
(
[ip] => 208.104.70.215
[iplong] => 0
)
配列
(
[ip] => 74.101.176.171
[iplong] => 0
)
配列
(
[ip] => 73.17.35.30
[iplong] => 0
)
配列
(
[IP ] => 70.198.197.3
[iplong] => 0
)
配列
(
[ip] => 46.44.179.76
[iplong] => 774681420
)


最後の変換のみが成功しました。他はすべて失敗します。理由は何ですか?


ディスカッションに返信 (解決策)

ip2long は配列を変換できませんか?

問題ありません

Array(    [ip] => 208.104.70.215    [iplong] => 3496494807)Array(    [ip] => 74.101.176.171    [iplong] => 1248178347)Array(    [ip] => 73.17.35.30    [iplong] => 1225859870)Array(    [ip] => 70.198.197.3    [iplong] => 1187431683)Array(    [ip] => 46.44.179.76    [iplong] => 774681420)

でも、何をしたいのかわかりません

モデレーターがコードを変更したのでしょうか? ローカルで何度も試しましたが、最後のコードしか読み取れません。理由がわかりません。

<?php$dataIp = array('208.104.70.215', '74.101.176.171', '73.17.35.30', '70.198.197.3', '46.44.179.76');foreach ($dataIp as $key=>$value) {		$data['ip']     =   $value;		$data['iplong']     =   bindec(decbin(ip2long($value)));                            		print_r($data);             }

出力
Array(    [ip] => 208.104.70.215    [iplong] => 3496494807)Array(    [ip] => 74.101.176.171    [iplong] => 1248178347)Array(    [ip] => 73.17.35.30    [iplong] => 1225859870)Array(    [ip] => 70.198.197.3    [iplong] => 1187431683)Array(    [ip] => 46.44.179.76    [iplong] => 774681420)

も正常です

print_r($data); をループの外に置くと、最後の 1 つだけになります

???、正常です。

私の完全なコードは次のとおりです

$dataIp= explode("\n", $_POST['ip']);		if(empty($dataIp)){	$this->error('未填写IP!');}//$dataIp = array('208.104.70.215', '74.101.176.171', '73.17.35.30', '70.198.197.3', '46.44.179.76');print_r($dataIp);foreach ($dataIp as $key=>$value) {        $data['ip']     =   $value;        $data['iplong']     =   bindec(decbin(ip2long($value)));                                    print_r($data);             }

数字の 5 行目に IP を入力してフォームに送信すると、5 行目がコメントされているかどうかに関係なく、出力される配列は同じになります。
しかし、ループの結果は異なります。結果は写真に示されています。なぜこの問題が発生したのか本当にわかりませんが、しばらく悩んでいました。

問題を発見してくれた上記の人々に感謝します。値が取得されない原因はフォームの前後のスペースでした。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。