好的,我是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].......
我设法使用此代码从第一个“Product”对象数组'register_sale_products'获取一个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;
我真的需要得到数组中每个对象的结果。
任何帮助非常感谢。
答案 0 :(得分: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;
答案 1 :(得分: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
两次。
在第7行使用list
是可选的,但允许在没有额外变量$details
的情况下进行分配。