【发布时间】:2020-09-24 11:13:29
【问题描述】:
对不起,如果在下面使用了错误的术语,希望您能理解我的意思。另外,请注意这只是一个学习任务,并没有实际使用。
我有一些 JSON 数据已被导入并解码到一个数组中。该数组是具有多个值(id、名称、价格、库存、类别、折扣等)的网上商店的不同产品的大约 20 个元素。我想根据名称打印所有项目的列表。但是,其中一个元素没有名称。 "name":"" 在 JSON 数据中完全缺失,因此在我的数组中也是如此。所以,它不是 NULL,它只是不存在。
我尝试了各种 if 函数(isset、!empty)并将 usort 和 foreach 放入 if 循环中,但我相信我尝试过的那些要求某个值名称确实存在但未设置而不是它根本不存在。
打印列表的代码示例:
echo "<table>
<thead>
<tr>
<th>Name</th>
<th>Price</th>
</tr>
</thead>
<tbody>";
usort($product_data, fn($a,$b) => strcmp($a->name, $b->name) );
foreach($product_data as $product) {
echo "<tr>";
echo "<td>". $product->name ."</td>";
echo "<td>". $product->price ."</td>";
}
}
echo"</td>
</tr>
</tbody>
</table>";
无论我做什么,我都会收到此错误: 注意:未定义的属性:stdClass::$name in [filename]
我认为必须有一种快速的方式来说“如果'name'存在就这样做(否则什么都不做)”但根本找不到它。请帮忙!
【问题讨论】:
-
首先,在没有“echo”
”的情况下执行你的代码。$product->name .” ”;”线。我认为您会遇到相同的错误,但使用 $price,因为问题是您没有正确调用这些字段。或者试试 $product.name。 -
那么,这个
echo isset($product->name)? $product->name : '';不起作用? -
不确定如何正确调用字段。我没有得到与价格相同的错误,所以相当肯定它与不存在的名称有关。 $product.name 不起作用,“致命错误:未捕获的错误:stdClass 类的对象无法转换为 C:\xampp\htdocs\index.php:140 中的字符串:堆栈跟踪:#0 {main} 在 C 中抛出: \xampp\htdocs\index.php”。但是可能与我的 JSON 工作有关。
$json_data = file_get_contents('./testapi.txt');$response = json_decode($json_data);$product_data = $response->products; -
Err, isset 应该用在这里还是其他地方?
echo "<td>".isset($product->name)? $product->name : ''."</td>";如果在这里,不起作用。
标签: php multidimensional-array