处理对象数组

时间:2020-06-22 19:38:09

标签: php json

我有一个对象的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;
                }
            }
        }
    }
?>

2 个答案:

答案 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"];
   }
}
相关问题