1

私は現在、mysql DBからデータを抽出し、デバイス名をキーとして使用して、それを多次元配列に配置しようとしています。

私が抱えている問題は、結果を繰り返すたびに、imを使用しているコードが最後のアイテムを強制終了して置き換えることです。

これがコードです。

##sql connection##
$result = mysql_query(SELECT Device.DeviceID, Device.DeviceName, History.HistoryRec, History.HistoryDetectedDate from Device JOIN History ON Device.DeviceID=History.DeviceID WHERE History.Active_LastRound = 1 AND History.DetectedDate <= $hrs);
if (!$result){
die('invaild query:' . mysql_error());

while($row = mysql_fetch_array($result))
{
$last24hoursarray[$row['DeviceName']] = array($row['HistoryRec']);
}

したがって、私が抱えている問題は、結果セットに同じデバイス名の複数のレコードがあり、最後の項目を上書きしないようにそれらを配列に配置する方法を理解できないことです。

例えば私は欲しい

switch1 => issue1
switch1 => issue2
switch1 => issue3
switch2 => issue1
etc

しかし、私が得るのは;

switch1 => issue3
switch2 => issue1

前もって感謝します。これは私が書いたPHPの最初のビットなので、優しくしてください:D

4

5 に答える 5

5

PHP配列キーは一意であるため、同じキーの下に複数の値を格納することはできません。次のことを試してください。

while($row = mysql_fetch_array($result)) {
        $last24hoursarray[$row['DeviceName']][] = $row['HistoryRec'];
}
于 2012-08-20T14:52:25.670 に答える
2

まず、配列ではキーに 1 つの値しか使用できません。あなたは得ることができなくなります。

switch1 => issue1
switch1 => issue2
switch1 => issue3

得られる

switch1 => [issue1, issue2, issue3]

コードをテストする時間は取っていませんが、次のようになります。

while($row = mysql_fetch_array($result)){
  if (array_key_exists ( $row['DeviceName'] , $last24hoursarray ){
    // append to existing issue.
    $last24hoursarray[$row['DeviceName']][] = array($row['HistoryRec']);
  } else{
    //No device name, create the array with issue.
    $last24hoursarray[$row['DeviceName']] = array($row['HistoryRec']);
  }
}
于 2012-08-20T15:06:22.797 に答える
0

デバイスごとに新しいアレイを作成してみてください。

$last24hoursarray[$row['DeviceName']] = new array($row['HistoryRec']);
于 2012-08-20T14:53:32.613 に答える
0

このコードが機能しない理由は、PHP連想配列が配列のキーごとに1つの値しか格納しないためです。これは、連想配列の全体的な目的であるキーで一意の値を検索できるようにするためです。Mercaの例のコードは、連想配列の各キーの値の配列を作成するため、うまく機能するはずです。

于 2012-08-20T14:56:04.670 に答える
0

ここで多次元配列を使用しているようには見えません。多次元配列は次のようになります。

switch1 = array(issue1, issue2, issue3);
switch2 = array(issue1);
multi = array(switch1, switch2);

issue = multi[0][1];  // issue2
于 2012-08-20T14:57:42.000 に答える