0

foreach ループでこの配列を再構築しようとしています:

Array
(
    [0] => Array
        (
            [ID] => 0
            [NAME] => 400
            [QUANTITY] => 12
        )

    [1] => Array
        (
            [ID] => 0
            [NAME] => 403
            [QUANTITY] => 108
        )

    [2] => Array
        (
            [ID] => 5
            [NAME] => 403
            [QUANTITY] => 108
        )
)

これは私がそれを次のように見せたいものです:

Array
(
    [ID] => Array
        (
            [NAME] => QUANTITY
            [NAME] => QUANTITY
        )
Array
(
    [ID] => Array
        (
            [NAME] => QUANTITY
        )

私が思いついたコードは正しく動作しません.配列は最後のエントリのみを表示するすべてのループで上書きされるようです:

Array
(
    [ID] => Array
        (
            [NAME] => QUANTITY
        )
    [ID] => Array
        (
            [NAME] => QUANTITY
        )
)

これは私のコードです:

$result = $sth->fetchAll(PDO::FETCH_ASSOC);

foreach($result as $key=>$value){
        $i = $value["ID"];
        $x = $value["NAME"];
        $y = $value["QUANTITY"]; 
        $arr[$i] = array( $x=>$y);                    
    }
4

5 に答える 5

0

同じキーを複数持つことはできません。それは不可能です。配列には一意のキーが必要です。name キーの配列を作成すると、次のようになります。

[ID] => Array
    (
        [NAME] => Array 
               (
                    [0] => QUANTITY
                    [1] => QUANTITY
               )
    )
于 2012-05-31T09:26:11.347 に答える
0

Vladが言うように、同じインデックス名を使用することはできません...

しかし、おそらく次のようなものが必要です。

foreach($result as $key=>$value){
    $i = $value["ID"];
    $x = $value["NAME"];
    $y = $value["QUANTITY"];

    // here you go:
    $data = array($x => $y);
    if (isset($arr[$i]) {
        $arr[$i] = array_merge($arr[$i], $data);
    } else {
        $arr[$i] = $data;
    }
}
于 2012-05-31T09:28:45.277 に答える
0

このコードを試してください:

<?php

$newArray = array();

foreach ($result as $value)
{
    $newArray[$value['id']] = array($value['NAME']=>$value['QUANTITY']);
}
于 2012-05-31T09:29:00.813 に答える
0
foreach($result as $key=>$value){
    $i = $value["ID"];
    $x = $value["NAME"];
    $y = $value["QUANTITY"]; 
    if(!isset($arr[$i])) $arr[$i] = array();
    $arr[$i][$x] = $y;
}
于 2012-05-31T09:29:58.880 に答える
0

これが役立つと思います。配列を宣言することを考慮してください。

$array = array(0 => array("id" => 0, "Name" => 400, "quantity" =>12),
                1 => array("id" => 0, "Name" => 403, "quantity" =>108),
                2 => array("id" => 5, "Name" => 403, "quantity" =>108)
);

そして、値も構造も持たない新しい配列を宣言します。

$newArray = array();

では、このコードを試してください。

foreach($array as $arr => $value)
{
    $id = $value["id"];
    $name = $value["Name"];
    $quantity = $value["quantity"];
    if(count($newArray[$id])>0){
        $newArray[$id] = array_merge($newArray[$id],array($name => $quantity));
    } else {
        $newArray[$id] = array($name => $quantity);
    }
}
于 2012-05-31T10:18:24.807 に答える