ホームページ >バックエンド開発 >PHPチュートリアル >特にマルチスレッドの処理 (この場合は IOS へのプッシュ) の点で、php の foreach と for の間に違いはありますか?
問題が発生し、その解決に長い時間を費やしましたが、最終的に、for を使用するのは簡単ではありませんでしたが、foreach を使用した方がうまく機能することがわかりました。
<?php // 循环有问题require_once "/home/bae/app/include/db.php"; $db_obj = new DB();$sql = "select appleID from appleDevice ";$result = $db_obj->db_array($sql);print_r("the array is:".$result);var_dump($result); $countArray = count($result); print_r("number:".$countArray); $passphrase = 'zhaojian'; $message = 'My first push notification!'; $ctx = stream_context_create(); stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem'); stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase); // Open a connection to the APNS server $fp = stream_socket_client( 'ssl://gateway.sandbox.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx); if (!$fp) exit("Failed to connect: $err $errstr" . PHP_EOL); echo 'Connected to APNS' . PHP_EOL; // Create the payload body $body['aps'] = array( 'alert' => $message, 'sound' => 'default' ); // Encode the payload as JSON $payload = json_encode($body); //$result = array("2d4401e324e7bd0ce574508b0849c7584b965df4ab183c82b3da65855835ec27","e20f2879b0ff6b7c6554b44f339c9e4bade2ee4a5a3a6d5de77bda074269221f"); foreach ($result as $device) { $deviceToken = $device['appleID']; print_r("the ".$i." item :".$deviceToken); $msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload; $result = fwrite($fp, $msg, strlen($msg)); if (!$result) echo 'Message not delivered' . PHP_EOL; else echo 'Message successfully delivered' . PHP_EOL;} fclose($fp); ?>
for ループがどのように書かれているかわかりませんでした
しかし、
foreach ( $result as $device) {
$result = fwrite($fp, $msg , strlen($msg));
元の量を変更します
for ループがこのような場合、当然機能しません
配列の参照に対する foreach ループ
をどのように書いたかわかりませんでしたfor ループ
ただし、foreach には
foreach ( $result as $device) {
$result = fwrite($fp, $msg, strlen($msg)); が含まれています
は元の量を変更します
for ループが次のような場合、当然うまくいきません
foreach は配列の参照をループすることです
for はこのように書いていました
うーん、これはサーバーにデータをアップロードするだけですか?値の変更が必要ですか?
{
$deviceToken = $result[$i]['appleID'] // 配列から値を取得 $result
print_r ( "***".$deviceToken."**");
// バイナリ通知を構築します
$msg = chr('n', 32) . ) .pack('n', strlen($payload)) . $payload;
// サーバーに送信します
$result ($fp, $msg, strlen($msg));
の値
if (!$result)
echo 'メッセージが配信されませんでした' .PHP_EOL;
else
echo 'メッセージが正常に配信されました'
}
{
$deviceToken = $result[$i]['appleID'] // 配列 $result から値を取得します
print_r("***".$deviceToken."**");
// バイナリ通知を構築します
$msg = chr(0) .pack('H*', $deviceToken) .pack('n', strlen($payload)) payload;
// サーバーに送信します
$result = fwrite($fp, $msg, strlen($msg)) // $result の値を変更します
if (!$result)
echo 'メッセージが返されません配信されました' . PHP_EOL;
else
echo 'メッセージは正常に配信されました'
Dejun は、3 回の人生で幸運であると説明します。 ! !実際に結果の名前を「for」に変更してみたところ、偶然にも同じ名前になりました~~~
ことに気づきました。