0

私はこれについてかなり混乱しています。以下のスイッチ/ケースを使用しているときに、ケース 1 をエコーアウトすると、結果は次のようになります。

Metal Cover (300)
Plexi (300)
Flat Cover (200)
Paper Cover (250)

json_encode をエコーアウトすると、次のように返されます。

{"300":"Plexi (300)","200":"Flat Cover (200)","250":"Paper Cover (250)"}

行の 1 つが失われるのはなぜですか? - ありがとう

コード

$type = 'cover';
    $stt = 1;
    $productId = 81;

        $results = array();
        switch ($type) {
        case "cover":
            $query = mysql_query("SELECT * 
                                    FROM albumcover 
                                    WHERE productId = '{$productId}'
                                ");
            $results[0] ="None";
            switch ($stt){
                case 1:
                    while($row = mysql_fetch_array($query)){
                        echo $results[$row['price2']] = $row['coverupgrade'] . ' (' . $row['price2'] . ')<br>';
                    }
                break;
                case 2:
                    while($row = mysql_fetch_array($query)){
                        $results[$row['price3']] = $row['coverupgrade'] .' (' . $row['price3'] . ')';
                    }
                    break;
                case 3:
                    while($row = mysql_fetch_array($query)){
                        $results[$row['price4']] = $row['coverupgrade'] .' (' . $row['price4'] . ')';
                    }
                    break;
                default :
                    while($row = mysql_fetch_array($query)){
                        $results[$row['price1']] = $row['coverupgrade'].' ('.$row['price1'].')';
                    }
                    break;
            }
            echo json_encode($results);
4

2 に答える 2

9

金属カバーとプレキシは同じキー (300) を持っています。キーは一意でなければならないため、後者は最初のものを上書きします。

1 つのキーに複数の値を格納する場合は、別の配列を使用する必要があります (ただし、これが必要かどうかはわかりません)。

$results[$row['priceX']][] = $row['coverupgrade'].' ('.$row['priceX'].')';

JSON でエンコードすると、次のようになります。

{
  "300":["Metal Cover (300)", "Plexi (300)"],
  "200":["Flat Cover (200)"],
  "250":["Paper Cover (250)"]
}
于 2012-08-01T16:39:48.313 に答える
2

の値を$row['pricex']キーとして使用しているため行が失われており、価格が同じ行が 2 つあるため、後の値が最初の値を上書きします。データを効果的に送信するには、JSON の構造を変更する必要があります。

$type = 'cover';
$stt = 1;
$productId = 81;

$results = array();
switch ($type) {
    case "cover":
        $query = mysql_query("
            SELECT * 
            FROM albumcover 
            WHERE productId = '{$productId}'
        ");
        $results[0] ="None";
        switch ($stt){
            case 1:
                while($row = mysql_fetch_array($query)){
                    $results['data'][] = array('price'=>$row['price2'], 'coverupgrade' => $row['coverupgrade'] . ' (' . $row['price2'] . ')<br>';
                }
                break;
            case 2:
                while($row = mysql_fetch_array($query)){
                    $results['data'][] = array('price'=>$row['price3'], 'coverupgrade' => $row['coverupgrade'] . ' (' . $row['price3'] . ')<br>';
                }
                break;
            case 3:
                while($row = mysql_fetch_array($query)){
                    $results['data'][] = array('price'=>$row['price4'], 'coverupgrade' => $row['coverupgrade'] . ' (' . $row['price4'] . ')<br>';
                }
                break;
            default:
                while($row = mysql_fetch_array($query)){
                    $results['data'][] = array('price'=>$row['price1'], 'coverupgrade' => $row['coverupgrade'] . ' (' . $row['price1'] . ')<br>';
                }
                break;
        }
        break;
}
echo json_encode($results);

表示するデータを考えると、次のように出力されます。

{
  "0": "none",
  "data": [
    {
      "price": "300",
      "coverupgrade": "Metal Cover (300)"
    },
    {
      "price": "300",
      "coverupgrade": "Plexi (300)"
    },
    {
      "price": "200",
      "coverupgrade": "Flat Cover (200)"
    },
    {
      "price": "250",
      "coverupgrade": "Paper Cover (250)"
    }
  ]
}
于 2012-08-01T16:41:49.333 に答える