0

エラーをスローしている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>&nbsp;&nbsp; $call - $location - $station - $units to device(s):&nbsp;&nbsp;'$deviceToken </br>".PHP_EOL;
    }
}

結果の配列出力は次のようになります。

ResultsArray = Array (
    [0] => Array (
        [devicetoken] => 773f5436825a7115417d3d1e036da20e806efeef547b7c3fe4da724d97c01b30
    )
)
4

5 に答える 5

2

$deviceTokendevicetokenが配列である場合、配列自体ではなく、その配列からのキーが必要です。

foreach ($rows as $key => $row)
{    
    $deviceToken = $row['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>&nbsp;&nbsp; $call - $location - $station - $units to device(s):&nbsp;&nbsp;'$deviceToken </br>".PHP_EOL;
}
于 2012-12-16T23:11:54.467 に答える
2
while($row = $result->fetch_assoc()) {
    $rows[] = $row;
}

$row1次元配列は配列の配列です。これは、他の配列で構成される配列をprint_rすると、
$rows各配列$rowが配列内の新しい項目として割り当てられるためです。$rows$rows

$rows as $deviceToken配列内の各値$rows(つまり、各配列$row)が取り出され、に割り当てられます$deviceToken

于 2012-12-16T23:16:50.060 に答える
1

$deviceToken確かに配列であり、おそらくresultArrayの最初の行と唯一の行です

あなたが必要です

$deviceToken['deviceToken']
于 2012-12-16T23:12:17.163 に答える
1

fetch_assocを使用すると、結果が配列を返すため、これは配列です(キーはデータベースの列名であり、値はフィールドの値です)。データベースからキーと値を返し、配列オブジェクトに格納します。fetch_rowsは、行のみを返します。別のクエリ関数メソッドの使用を検討してください。また、私は他の2つに同意します。行を$key=>$valueとして区切る必要があります。

于 2012-12-16T23:13:14.750 に答える
0

によって返される結果セットをループすると、配列の配列が作成され->fetch_assoc()ます。これはで表示されますprint_r()。これは->fetch_assoc()、列が1つであっても、データの配列を返すためです。

于 2012-12-16T23:13:55.327 に答える