我有一个对象的JSON数组,每个对象包含一个MySQL数据库行,该行还包含有关一项的信息。我的问题是如何根据另一个键从对象获取某个键值?让我弄清楚,items
是一个JSON
数组,包含几个对象,每个对象都是用数字和字符串keys
生成的,所以我需要的是获取price
键,即在具有特定codenumber
的同一个对象中,基本上是从price
键获得codenumber
值
第二件事是如何在对象的新值内添加新键?例如,如果我有一个名为$Count
的变量,如何将其值添加到Count
这样的新键中的对象中?函数array_push可以向对象添加新键吗?
JSON
数组
Array (
[0] => stdClass Object (
[0] => 1
[1] => o4
[2] => Efexor
[3] => Eklil
[4] => 1
[5] => 30
[6] => 15
[7] => Phezer
[8] => Venlafaxine
[9] =>
[10] => 0
[11] => 2020-03-25
[12] => 2021-08-25
[13] => 1
[14] => 0
[15] => 0
[16] => caps
[17] => ..\upload\Efexor.jpg
[id] => 1
[qty] => 15
[Sale] => 1
[name] => Efexor
[bonus] => 0
[price] => 30
[company] => Phezer
[draftid] => 1
[discount] => 0
[imageurl] => ..\upload\Efexor.jpg
[owned-com] => Eklil
[pack-size] => 0
[codenumber] => o4
[chemicalcom] => Venlafaxine
[dosage-form] => caps
[concentration] =>
[expiration-date] => 2021-08-25
[production-date] => 2020-03-25
)
[1] => stdClass Object (
[0] => 2
[1] =>
[2] => Efexor
[3] => Eklil
[4] => 1
[5] => 15
[6] => 10
[7] => Phezer
[8] => Venlafaxine
[9] =>
[10] => 0
[11] => 2020-03-25
[12] => 2021-08-25
[13] => 0
[14] => 0
[15] => 0
[16] => caps
[17] => ..\upload\Efexor.jpg
[id] => 2
[qty] => 10
[Sale] => 0
[name] => Efexor
[bonus] => 0
[price] => 15
[company] => Phezer
[draftid] => 1
[discount] => 0
[imageurl] => ..\upload\Efexor.jpg
[owned-com] => Eklil
[pack-size] => 0
[codenumber] =>
[chemicalcom] => Venlafaxine
[dosage-form] => caps
[concentration] =>
[expiration-date] => 2021-08-25
[production-date] => 2020-03-25
)
[2] => stdClass Object (
[0] => 3
[1] =>
[2] => panadol
[3] => com2
[4] => 1
[5] => 5
[6] => 12
[7] => GSK
[8] => Paracetamol
[9] =>
[10] => 0
[11] => 2020-04-09
[12] => 2021-02-09
[13] => 0
[14] => 0
[15] => 2
[16] => taps
[17] => ..\upload\panadol.png
[id] => 3
[qty] => 12
[Sale] => 0
[name] => panadol
[bonus] => 2
[price] => 5
[company] => GSK
[draftid] => 1
[discount] => 0
[imageurl] => ..\upload\panadol.png
[owned-com] => com2
[pack-size] => 0
[codenumber] =>
[chemicalcom] => Paracetamol
[dosage-form] => taps
[concentration] =>
[expiration-date] => 2021-02-09
[production-date] => 2020-04-09
)
[3] => stdClass Object (
[0] => 4
[1] => codenumber
[2] => name
[3] => owned
[4] => 1
[5] => 9
[6] => 1
[7] => gsk
[8] => gscom
[9] => 12mg
[10] => 3
[11] => 2020-03-25
[12] => 2021-02-09
[13] => 1
[14] => 0
[15] => 0
[16] => caps
[17] => ..\upload\panadol.png
[id] => 4
[qty] => 1
[Sale] => 1
[name] => name
[bonus] => 0
[price] => 9
[company] => gsk
[draftid] => 1
[discount] => 0
[imageurl] => ..\upload\panadol.png
[owned-com] => owned
[pack-size] => 3
[codenumber] => codenumber
[chemicalcom] => gscom
[dosage-form] => caps
[concentration] => 12mg
[expiration-date] => 2021-02-09
[production-date] => 2020-03-25
)
[4] => stdClass Object (
[0] => 5
[1] => d322
[2] => fsdfds
[3] => ewfwef
[4] => 1
[5] => 3232
[6] => 222
[7] => none
[8] => nonoe
[9] => nonoe
[10] => 12
[11] => 2020-03-25
[12] => 2021-02-09
[13] => 1
[14] => 0
[15] => 2
[16] => caps
[17] => ..\upload\panadol.png
[id] => 5
[qty] => 222
[Sale] => 1
[name] => fsdfds
[bonus] => 2
[price] => 3232
[company] => none
[draftid] => 1
[discount] => 0
[imageurl] => ..\upload\panadol.png
[owned-com] => ewfwef
[pack-size] => 12
[codenumber] => d322
[chemicalcom] => nonoe
[dosage-form] => caps
[concentration] => nonoe
[expiration-date] => 2021-02-09
[production-date] => 2020-03-25
)
[5] => stdClass Object (
[0] => 6
[1] =>
[2] =>
[3] =>
[4] => 1
[5] => 0
[6] => 0
[7] =>
[8] =>
[9] =>
[10] => 0
[11] => 0000-00-00
[12] => 0000-00-00
[13] => 0
[14] => 0
[15] => 0
[16] => eyedrop
[17] => ..\upload\panadol.png
[id] => 6
[qty] => 0
[Sale] => 0
[name] =>
[bonus] => 0
[price] => 0
[company] =>
[draftid] => 1
[discount] => 0
[imageurl] => ..\upload\panadol.png
[owned-com] =>
[pack-size] => 0
[codenumber] =>
[chemicalcom] =>
[dosage-form] => eyedrop
[concentration] =>
[expiration-date] => 0000-00-00
[production-date] => 0000-00-00
)
[6] => stdClass Object (
[0] => 7
[1] =>
[2] =>
[3] =>
[4] => 1
[5] => 0
[6] => 0
[7] =>
[8] =>
[9] =>
[10] => 0
[11] => 0000-00-00
[12] => 0000-00-00
[13] => 0
[14] => 0
[15] => 0
[16] =>
[17] => ..\upload\panadol.png
[id] => 7
[qty] => 0
[Sale] => 0
[name] =>
[bonus] => 0
[price] => 0
[company] =>
[draftid] => 1
[discount] => 0
[imageurl] => ..\upload\panadol.png
[owned-com] =>
[pack-size] => 0
[codenumber] =>
[chemicalcom] =>
[dosage-form] =>
[concentration] =>
[expiration-date] => 0000-00-00
[production-date] => 0000-00-00
)
[7] => stdClass Object (
[0] => 8
[1] =>
[2] =>
[3] =>
[4] => 1
[5] => 0
[6] => 0
[7] =>
[8] =>
[9] =>
[10] => 0
[11] => 0000-00-00
[12] => 0000-00-00
[13] => 0
[14] => 0
[15] => 0
[16] => eardrop
[17] => ..\upload\panadol.png
[id] => 8
[qty] => 0
[Sale] => 0
[name] =>
[bonus] => 0
[price] => 0
[company] =>
[draftid] => 1
[discount] => 0
[imageurl] => ..\upload\panadol.png
[owned-com] =>
[pack-size] => 0
[codenumber] =>
[chemicalcom] =>
[dosage-form] => eardrop
[concentration] =>
[expiration-date] => 0000-00-00
[production-date] => 0000-00-00
)
)
我尝试执行第一个功能core.php
:-
<?PHP
public function getPrice($id,$codenumber){
if($this->connected === true){
try{
$items = $this->connection->prepare("SELECT `items` FROM `bills` WHERE id=:id");
$items->bindParam(":id",$id);
$items->execute();
$fetchedItems = $items->fetchColumn();
$items = json_decode($fetchedItems);
foreach ($items as $item){
$price = $item->price;
echo $price; // What i want is to echo the Price-Key for the value that has the $codenumber [key]
}
}
catch(PDOException $e){
if($this->errors === true){
return $this->error($e->getMessage());
}else{
return false;
}
}
}
}
?>
答案 0 :(得分:2)
假设codenumber
在数组中是唯一的,只需用codenumber
重新索引数组即可,然后很简单(PHP> = 7):
$codenumber = 'o4';
$array = array_column($array, null, 'codenumber');
echo $array[$codenumber]->price; // outputs 30
可重复使用多次。如果您只需要执行一次:
echo array_column($array, null, 'codenumber')[$codenumber]->price;
答案 1 :(得分:1)
我相信您正在寻找的是这样的东西,其中$ id是您要搜索的值,而$ json是您的数组。如果不存在count,它将自动创建为0的值。
$id = 100;
$items = json_decode($fetchedItems, true);
foreach($items as $k => $v){
if(isset($json[$k]["count"]) === false){
$json[$k]["count"] = 0;
}
if($v["codenumber"] == $id){
$json[$k]["count"] += $v["price"];
}
}