PHP从另一个数组创建数组

时间:2017-11-02 01:08:11

标签: php arrays

我有一个从API收到的数组。

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,并从数组中删除一些对象,如fPricepriceType等。我认为最好的方法是这样做是为了创建另一个数组。但是我似乎无法让它发挥作用:

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)
  }
}

任何指针都会受到赞赏。

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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);
}