エラーをスローしているPHPコードのスライスがあります。
注意:配列から文字列への変換。
なんらかの理由$deviceToken
で、文字列であるはずの配列であるためです。
PHPがそれを配列だと考える理由はわかりません。mysqliクエリの結果配列を出力すると、配列内に配列が表示されます。そのため、配列であると見なされます$deviceToken
。配列が1つだけ必要で、配列の値変数になります$rows
。$deviceToken
このため、バイナリで読み取られるコードの後半で$deviceToken
、文字列ではなく配列であるため、別のエラーがスローされます。コードについては、以下を参照してください。
// Create an array of units assigned to call
$unitsarray = explode(",", $units);
for ($i = 0; $i < count($unitsarray); $i++){
echo "Units row $i = $unitsarray[$i] <br />";
$result = $mysqli->query("SELECT devicetoken FROM `department devices` WHERE unit LIKE $unitsarray[$i]");
while($row = $result->fetch_assoc()) {
$rows[] = $row;
}
echo "ResultsArray = ";
print_r($rows);
// Loop APNS for each device token in $devicetoken array
foreach ($rows as $deviceToken)
{
// Build the binary notification
$msg = chr(0) . pack('n', 32) . pack("H*", $deviceToken) . pack('n', strlen($payload)) . $payload;
// Send it to the server
$result2 = fwrite($fp, $msg, strlen($msg));
// Create APNS operation output
if (!$result2)
echo 'Failed message'.PHP_EOL;
else
echo "<b>Successful message sent:</b> $call - $location - $station - $units to device(s): '$deviceToken </br>".PHP_EOL;
}
}
結果の配列出力は次のようになります。
ResultsArray = Array (
[0] => Array (
[devicetoken] => 773f5436825a7115417d3d1e036da20e806efeef547b7c3fe4da724d97c01b30
)
)