2017-11-02 34 views
1

私はAPIから受け取った配列を持っています。PHPは別の配列から配列を作成します

object(stdClass)#19498 (4) { 
    ["success"]=> 
    bool(true) 
    ["quoteId"]=> 
    int(0011) 
    ["abcValue"]=> 
    float(00) 
    ["priceResponse"]=> 
    array(4) { 
    [0]=> 
    object(stdClass)#19502 (9) { 
     ["priceId"]=> 
     int(1263) 
     ["fPrice"]=> 
     float(37.14) 
     ["grossPrice"]=> 
     float(44.7) 
     ["priceType"]=> 
     string(2) "ABC" 
    } 
    [1]=> 
    object(stdClass)#19501 (10) { 
     ["priceId"]=> 
     int(1263) 
     ["fPrice"]=> 
     float(37.14) 
     ["grossPrice"]=> 
     float(44.7) 
     ["priceType"]=> 
     string(2) "ABC" 
    } 
    [2]=> 
    object(stdClass)#19500 (8) { 
     ["priceId"]=> 
     int(1266) 
     ["fPrice"]=> 
     float(550.14) 
     ["grossPrice"]=> 
     float(544.7) 
     ["priceType"]=> 
     string(2) "DEF" 
    } 
    } 
} 
私は PriceResponseすなわちcustomPriceに別のオブジェクトを追加しても fPriceのような配列からいくつかのオブジェクトを削除するには、配列をループにしたい

priceTypeなど私はこれを行うために考え出し最良の方法は、別の配列を作成することでした。しかし、私はそれが働くように見えることはできません。

PHP:

$output_array = json_decode($output); 
$modified_array = array(); 
$priceResultArray = array(); 

foreach($output_array as $j => $item) { 

    foreach($output_array->priceResponse as $i => $field) { 
     $percent = $field->grossPrice * 10/100; 
     $customPrice = $field->grossPrice + $percent; 


     $priceResultArray['priceId'] = $field->priceId; 
     $priceResultArray['customPrice'] = $customPrice; 

    } 

    $modified_array['success'] = $output_array->success; 
    $modified_array['quoteId'] = $output_array->quoteId; 
    $modified_array['priceResponse'] = $priceResultArray; 

} 
var_dump($modified_array); 

これは修正された配列の出力である - それだけでpriceResultArrayの最後の結果を示しています

array(3) { 
    ["success"]=> 
    bool(true) 
    ["quoteId"]=> 
    int(0011) 
    ["priceResult"]=> 
    array(5) { 
    ["priceId"]=> 
    int(1266) 
    ["customPrice"]=> 
    float(599.17) 
    } 
} 

任意のポインタが評価されるだろう。

+0

'$ output_array'は配列ではなくオブジェクトです。なぜそれをループしていますか? – Barmar

+0

唯一の配列は '$ output_array-> price_response'です。 – Barmar

+0

なぜ新しいアレイを作成するのが最善の方法だと思いますか?単に既存の配列のプロパティを追加したり削除したりするのはなぜですか? – Barmar

答えて

1

あなたは外側のループを必要としません。 $output_arrayは単一のオブジェクトであり、配列ではありません。プロパティをループしていますが、$jまたは$itemで何もしないでください。

新しい配列を作成する代わりに、元のpriceResponse配列のオブジェクトを変更するだけで済みます。

$output_array = json_decode($output); 
foreach ($output_array->priceResponse as $field) { 
    $percent = $field->grossPrice * 10/100; 
    $customPrice = $field->grossPrice + $percent; 
    $field->customPrice = $customPrice; 
    unset($field->fPrice); 
    unset($field->priceType); 
    unset($field->grossPrice); 
} 
+0

このコードは私のためには機能しませんでしたが( 'var_dump'は古い出力を返します)、出力を間違っていると正しく指摘しました今度は配列のオブジェクトだった。 >。<もう一度お試しください。 – input

+0

なぜ動作しないのか分かりません。私はちょうど簡単なテストをしたし、それはうまくいくと思う。 – Barmar

1

ループ内の同じキーの中に値を入れるため、このような出力があります。 各ループインターレーションで新しいオブジェクトを作成する必要があります。 は、チェックアウト、このコード:

$output_array = json_decode($output); 
 
$modified_array = array(); 
 
$priceResultArray = array(); 
 

 
foreach($output_array as $j => $item) { 
 

 
    foreach($output_array->priceResponse as $i => $field) { 
 
     $percent = $field->grossPrice * 10/100; 
 
     $customPrice = $field->grossPrice + $percent; 
 

 
     $singlePriceResult = array(); 
 
     $singlePriceResult['priceId'] = $field->priceId; 
 
     $singlePriceResult['customPrice'] = $customPrice; 
 

 
     $priceResultArray[] = $singlePriceResult; 
 
    } 
 

 
    $modified_array['success'] = $output_array->success; 
 
    $modified_array['quoteId'] = $output_array->quoteId; 
 
    $modified_array['priceResponse'] = $priceResultArray; 
 

 
} 
 
var_dump($modified_array);

+0

これはpriceResultArray出力のすべてを示していましたが、それを 'priceResponse'配列のカウントに繰り返しました。 – input

+0

@入力はい。しかし、どのような動作が想定されましたか? –

+0

これは、すべてのpriceResultArrayオブジェクトを繰り返しています(上記の出力では、3回)。 priceResultArrayオブジェクトの_all_が1回だけ表示されます。 – input

関連する問題