1

これは私を狂気にさせています。入力/出力を検証しましたが、まだ予期しない動作が発生します。2のはずなのにヌマヌマやってます。私は何が欠けていますか?

入力:

data
Array
(
    [0] => Array
        (
            [lineId] => 1
            [quantity] => 2
            [costPerItem] => 16.585
            [itemId] => 1
        )

)

コード:

printr( $data, 'data' );
foreach( $data as $i => $value ){
    foreach( $value as $key => $a ){
        echo 'key: '.$key.' - a: '.$a.'<br />';
        ( $key == 'quantity' ) ? $dataQuantity[$i] = $a : $dataQuantity[$i] = 'numanuma'; 
    }
}
printr( $dataQuantity, 'data quantity' );

出力:

key: lineId - a: 1
key: quantity - a: 2
key: costPerItem - a: 16.585
key: itemId - a: 1

data quantity
Array
(
    [0] => numanuma
)
4

4 に答える 4

3

これは、キーitemIdが数量キーの後にあるためです。そのため、2に設定しましたが、numanumaに設定した後のループです。

これを試して:

printr( $data, 'data' );
foreach( $data as $i => $value ){
    foreach( $value as $key => $a ){
        echo 'key: '.$key.' - a: '.$a.'<br />';
        if( $key == 'quantity' )
        { 
            $dataQuantity[$i] = $a; 
        } 
    }
}
printr( $dataQuantity, 'data quantity' );
于 2013-02-12T18:34:19.770 に答える
2

キーが「数量」でない場合は、「ヌマヌマ」を割り当てます。「数量」キーの後、一部のキーは数量ではないため、「numanuma」がの値に割り当てられます$a

簡単に言えば、「numanuma」を割り当てる前に、追加のチェックとフラグを追加して、$dataQuantity[$i]すでに正しく割り当てられているかどうかを確認します。

于 2013-02-12T18:34:13.860 に答える
2

これにはいくつか問題があります。

まず、$dataQuantity[$i]サブループで値を設定し$iますが、外側のループで増分されます。

コードが「数量」を認識すると、に設定さ$dataQuantity[$i]れる場合がありますが、変更されていないため、コードは2それを認識itemIdしてオーバーライドします。$dataQuantity[$i]$i

次に、三項ifステートメントを次のように変更する必要があります。

$dataQuantity[$i] = ( $key == 'quantity' ) ? $a : 'numanuma';

それは私が前に述べたことを考慮に入れていません

実用的なサンプルは次のとおりです。

printr( $data, 'data' );
foreach( $data as $i => $value ){
    foreach( $value as $key => $a ){
        if ($key == 'quantity') {
            $dataQuantity[$i] = $a;
            break;
        }
    }
}
printr( $dataQuantity, 'data quantity' );
于 2013-02-12T18:35:34.267 に答える
0

値の割り当てに使用されない三項演算子は、次のとおりです。

注:三項演算子はステートメントであり、変数ではなくステートメントの結果に評価されることに注意してください。これは、参照によって変数を返すかどうかを知るために重要です。ステートメントは$var== 42?を返します。$ a:$ b; したがって、参照による戻り関数では機能せず、以降のPHPバージョンでは警告が発行されます。

ソース

于 2013-02-12T18:35:24.470 に答える