I have a JSON array of objects each object contains a MySQL database row that also contains information about an item. my question is how can I get a certain key-value from an object depending on another key? let me get it straight, items
is a JSON
array contains a couple of objects each object is generated with both numeric and string keys
, So what I need is to get the value of the price
key that in the same Object with a specific codenumber
basically getting the price
value from the codenumber
key
the Second thing is how to add a new key within a new value to the object? like if I have a variable called $Count
how can I add his value to the object within a new key like Count
? is the function array_push can add a new key to the Object?
the JSON
array
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] => ..uploadEfexor.jpg [id] => 1 [qty] => 15 [Sale] => 1 [name] => Efexor [bonus] => 0 [price] => 30 [company] => Phezer [draftid] => 1 [discount] => 0 [imageurl] => ..uploadEfexor.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] => ..uploadEfexor.jpg [id] => 2 [qty] => 10 [Sale] => 0 [name] => Efexor [bonus] => 0 [price] => 15 [company] => Phezer [draftid] => 1 [discount] => 0 [imageurl] => ..uploadEfexor.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] => ..uploadpanadol.png [id] => 3 [qty] => 12 [Sale] => 0 [name] => panadol [bonus] => 2 [price] => 5 [company] => GSK [draftid] => 1 [discount] => 0 [imageurl] => ..uploadpanadol.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] => ..uploadpanadol.png [id] => 4 [qty] => 1 [Sale] => 1 [name] => name [bonus] => 0 [price] => 9 [company] => gsk [draftid] => 1 [discount] => 0 [imageurl] => ..uploadpanadol.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] => ..uploadpanadol.png [id] => 5 [qty] => 222 [Sale] => 1 [name] => fsdfds [bonus] => 2 [price] => 3232 [company] => none [draftid] => 1 [discount] => 0 [imageurl] => ..uploadpanadol.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] => ..uploadpanadol.png [id] => 6 [qty] => 0 [Sale] => 0 [name] => [bonus] => 0 [price] => 0 [company] => [draftid] => 1 [discount] => 0 [imageurl] => ..uploadpanadol.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] => ..uploadpanadol.png [id] => 7 [qty] => 0 [Sale] => 0 [name] => [bonus] => 0 [price] => 0 [company] => [draftid] => 1 [discount] => 0 [imageurl] => ..uploadpanadol.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] => ..uploadpanadol.png [id] => 8 [qty] => 0 [Sale] => 0 [name] => [bonus] => 0 [price] => 0 [company] => [draftid] => 1 [discount] => 0 [imageurl] => ..uploadpanadol.png [owned-com] => [pack-size] => 0 [codenumber] => [chemicalcom] => [dosage-form] => eardrop [concentration] => [expiration-date] => 0000-00-00 [production-date] => 0000-00-00 ) )
my attempt to make the first function 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; } } } } ?>
Advertisement
Answer
Assuming that codenumber
is unique in the array, just re-index your array with codenumber
and then it’s simple (PHP >= 7):
$codenumber = 'o4'; $array = array_column($array, null, 'codenumber'); echo $array[$codenumber]->price; // outputs 30
That’s reusable multiple times. If you just need to do it once:
echo array_column($array, null, 'codenumber')[$codenumber]->price;