0

OK、私はPHPが初めてです。私の質問を説明するために最善を尽くします。

これは json オブジェクトの var_dump です。
私がやろうとしているのは、「register_sale_products」オブジェクトの情報にアクセスすることです。
各販売における製品の SKU、価格などの製品情報が含まれています。以下の例では、SKU をリストしようとしています。

object(stdClass)[1]
  public 'register_sales' => 
    array
      0 => 
        object(stdClass)[2]
          public 'id' => string '7c969b77-6825-bc65-3e04-64f922a570eb' (length=36)
          public 'register_id' => string '07709f8e-8d90-11e0-8e09-4040f540b50a' (length=36)
          public 'invoice_number' => string 'BH8464' (length=6)
          public 'register_sale_products' => 
            array
              ...
          public 'totals' => 
            object(stdClass)[6]
              ...
          public 'register_sale_payments' => 
            array
              ...
      1 => 
        object(stdClass)[9].......

このコードを使用して、最初の「製品」オブジェクト配列「register_sale_products」から 1 つの SKU を取得できました。

$array = array()    ;
foreach($data->register_sales as $sale){
    $array =    $sale->register_sale_products ;
    }
foreach($array as $saleprod){
        $details = explode(' / ', $saleprod->sku);
    $result = $details[0];
    }
echo $result;

配列内の各オブジェクトの結果を取得する必要があります。
どんな助けでも大歓迎です。

4

2 に答える 2

1

私があなたのフォーマットを正しく理解していれば、これはSKUの配列を作成するはずです(注:セットではなく、重複するSKUは複数回配列に含まれます)。

$skus = array();
// Outer loop over sales
foreach($data->register_sales as $sale) {
  // Inner loop over a sale's products
  foreach($sale->register_sale_products as $product) {
    // Add the SKU to the array
    list($skus[]) = explode(' / ', $product->sku);
  }
}

// $skus now contains all the SKUs
print_r($skus);

少しコンテキストを説明すると、ソリューションの主な問題は(ここでも、構造の解釈に基づいて)、配列に$arrayマージするのではなく、販売ごとに上書きすることです(例)。$sale->register_sale_products$array = array_merge($array, $sale->register_sale_products);

$data->register_salesただし、内側のループを使用すると、 2回のループが効果的に回避されるため、さらに改善することができます。

7行目の使用listはオプションですが、追加の変数なしで割り当てを行うことができます$details

于 2012-06-01T16:20:39.377 に答える
1

$resultこれがループするたびに上書きしています:

foreach($array as $saleprod){
    $details = explode(' / ', $saleprod->sku);
    $result = $details[0];
}
echo $result;

あなたがしなければならないことはecho、ループ内です$result。新しい配列にするか、$result追加する文字列にする必要があります。

foreach($array as $saleprod){
    $details = explode(' / ', $saleprod->sku);
    echo $details[0], '<br>';
}

// or
$result = array();
foreach($array as $saleprod){
    $details = explode(' / ', $saleprod->sku);
    $result[] = $details[0];
}
foreach($result as $r) {
    echo $r;
}

//or
$result = '';
foreach($array as $saleprod){
    $details = explode(' / ', $saleprod->sku);
    $result .= $details[0] . ' ';
}
echo $result;
于 2012-06-01T16:11:50.897 に答える