【发布时间】:2013-07-01 06:14:50
【问题描述】:
这是我在数据库中的表产品和类别的示例:
tbl_categories
|id_category | name........| slug........|
|1...........| Hanger .....| hanger .....|
|2...........| Lamp .......| lamp .......|
|3...........| Merchandise | merchandise |
|4...........| Storage ....| storage ....|
tbl_products
id_products | id_category | name .....| slug .....| images
1 ..........| 1 ..........| Hanger asd| hanger-asd|json
2 ..........| 1 ..........| Hanger asd| hanger-dsa|json
3 ..........| 1 ..........| Hanger asd| hanger-das|json
4 ..........| 1 ..........| Hanger asd| hanger-sad|json
图像的内容是这样的 json_encoded:
id_product : 1
{
"7b8d9fbfe384b1b6e4cfb0da473df8e5": {
"alt": "jhonson hanger",
"caption": "",
"filename": "7b8d9fbfe384b1b6e4cfb0da473df8e5.jpg",
"primary": true
},
"f7d225c85590012f91bad32dd8adaa3d": {
"alt": "jhonson hanger",
"caption": "lorem ipsum lorem ipsum dolor siamet ameticioud",
"filename": "f7d225c85590012f91bad32dd8adaa3d.jpg"
}
}
等等
我想要的第一件事是让每个产品都显示在我的电子商务产品页面上,因此在我的控制器产品中:
function index()
{
$data = array(
"keyword" => "sadasdasd",
"description" => "asdasdasd",
"content" => "product",
"title" => "BALOK Official :: Product"
);
$products = $this->model_product->get_all_products();
$data['products'] = $products;
$this->load->view("product", $data);
}
在我的模型产品中:
function get_all_products()
{
$this->db->select
("
tbl_product.name AS prod_name,
images,
tbl_product.slug AS prod_slug,
tbl_categories.slug AS cat_slug
");
$this->db->from("tbl_products");
$this->db->join("tbl_categories", "tbl_categories.id_category = tbl_product.id_category");
$this->db->order_by("prod_name", "ASC");
$query = $this->db->get();
if($query->num_rows() > 0)
{
return $query->result();
}
else
{
return false;
}
}
如何为我认为的每个产品显示产品名称、prod_slug、cat_slug 和 只有一个 images['filename],如果 "primary = true" 则显示主要其他图像显示第一张图像。数组中的示例可能是images[0];。
我已使用此代码检查了字段图像中的数据:
foreach ($products as $prod)
{
$prod->images = json_decode($prod->images);
print_r($prod->images);
}
这显示stdClass 对象如下:
stdClass Object
(
[43f8cd2ba0fcb96453b43b36b6a4f759] => stdClass Object
(
[filename] => 43f8cd2ba0fcb96453b43b36b6a4f759.jpg
[alt] =>
[caption] =>
[primary] => 1
)
)
stdClass Object
(
[f7d225c85590012f91bad32dd8adaa3d] => stdClass Object
(
[filename] => f7d225c85590012f91bad32dd8adaa3d.jpg
[alt] => jhonson hanger
[caption] => lorem ipsum lorem ipsum dolor siamet ameticioud
[primary] => 1
)
[7b8d9fbfe384b1b6e4cfb0da473df8e5] => stdClass Object
(
[filename] => 7b8d9fbfe384b1b6e4cfb0da473df8e5.jpg
[alt] => jhonson hanger
[caption] =>
)
)
stdClass Object
(
[29c2100ff85ec538e17c6d68fafbd43d] => stdClass Object
(
[filename] => 29c2100ff85ec538e17c6d68fafbd43d.jpg
[alt] =>
[caption] =>
[primary] => 1
)
[8d4ecb9c4dc369febe70019586f3d570] => stdClass Object
(
[filename] => 8d4ecb9c4dc369febe70019586f3d570.jpg
[alt] =>
[caption] =>
)
[dc4358c470c33f20206afc180a28ae5b] => stdClass Object
(
[filename] => dc4358c470c33f20206afc180a28ae5b.jpg
[alt] =>
[caption] =>
)
)
那个stdobject让我很困惑。
更新。
鉴于我写这个:
foreach ($products as $prod)
{
echo $prod->prod_name.' - '.$prod->prod_slug.' - '.$prod->cat_slug.'<br>';
}
它成功显示我想要的;
书柜木 - 书柜 - 木 - 存储
全新衣架 Jhonson - 全新衣架 - Jhonson - 衣架
Flash Wood - flash-wood - 商品
Gantungan baju dari kayu - gantungan-baju-dari-kayu - 衣架
萨满灯 - 萨满灯 - 灯
储物木架 - storage-wood-shelf - storage
木灯 - 木灯 - 灯
木灯超越 - 木灯超越 - 灯
Yoyo Kayu - boneka-kayu-lucu - 商品
图片还是json格式的,我不知道怎么操作,我只是想array_value,把json_data解码成数组后转换吧?
【问题讨论】:
-
你的问题让我很困惑;)。对于stdObject,如果您解码json,您可以选择是将结果作为具有键和值的数组,还是作为具有属性的对象。 stdClass 只是一个 anonymous 对象。但你的实际问题是什么?
-
@t.niese 我的实际问题是我不知道如何只过滤每个产品的一个图像,然后显示它们。如果 json 上的主要 isset 然后显示主要.. :( 如果你知道我的意思,你能给我举个例子吗?
-
只是为了确保我理解你的正确。对于某些产品,您的 JSON 中有多个图像,例如您的示例中的最后一个
stdClass。从那你只有一个拥有一个? (它总是第一个吗?) -
是的,你说得对.. 产品可以有多个图像,并且在此产品页面中,它显示数据库中的每个产品,并且始终显示第一个或如果“primary = true”则显示主图像.
标签: json codeigniter foreach