0

我有一段抛出错误的 PHP 代码;

注意:数组到字符串的转换。

这是因为由于某种原因$deviceToken它应该是一个字符串时是一个数组。

我不明白为什么 PHP 认为它是一个数组。当我打印 mysqli 查询的结果数组时,它会在数组中显示一个数组,因此,它认为$deviceToken是一个数组。我只想要一个数组,$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

$deviceToken是一个数组,您需要该devicetoken数组中的键,而不是数组本身。

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;
}

$row是一维数组
$rows是数组的数组,因为当您 print_r由其他数组组成的数组时,每个数组$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 只返回行。研究使用不同的查询函数方法。我也同意另外两个。您必须将行分隔为 $key => $value。

于 2012-12-16T23:13:14.750 回答
0

当您遍历由返回的结果集时,您正在创建一个数组数组->fetch_assoc()。这在print_r(). 这是因为->fetch_assoc()返回一个数据数组,即使只有一列。

于 2012-12-16T23:13:55.327 回答