MohammedZr Ответов: 0

Поиск объекта массива с помощью оператора if


Как говорится в названии я зацикливаюсь с помощью оператора if чтобы найти a key-value из массива под названием $decoded, так что в основном функция выглядит следующим образом, если $product-$key равняется $item и $product->$key2 равняется $ProductId затем отредактируйте конкретное значение ключа сначала я протестировал код таким образом, и он работает

$decoded = json_decode( $fetched );
                
$stmt=$this->connection->prepare('update `bills` set `items`=:json where id=:id');


foreach( $decoded as $index => $product ){
    
    if( $product->$key == $item ){ // just the $Product->$key and it works fine
        $decoded[ $index ]->$key = $value;
        $json = json_encode( $decoded );
        
        $stmt->execute([
            ':json' =>  $json,
            ':id'   =>  $bid
        ]);
    }                   
}


но когда я добавил Это $product->$key2 == $ProductId он перестал работать, так чего же мне здесь не хватает?

Что я уже пробовал:

полный код:-

public function AlterJSON( $bid=false, $item=false,$ProductId=false, $key=false, $key2=false, $value=false ){
    try{
        if( $bid && $item && $key && $value && $ProductId && $this->connected === true ){
            
            $stmt=$this->connection->prepare('select `items` from `bills` where `id`=:id');
            $stmt->execute( [ ':id' => $bid ] );
            
            $fetched = $stmt->fetchColumn();
            $decoded = json_decode( $fetched );
            
            $stmt=$this->connection->prepare('update `bills` set `items`=:json where id=:id');
            
            
            foreach( $decoded as $index => $product ){
                
                if( $product->$key == $item && $product->$key2 == $ProductId ){
                    $decoded[ $index ]->$key = $value;
                    $json = json_encode( $decoded );
                    
                    $stmt->execute([
                        ':json' =>  $json,
                        ':id'   =>  $bid
                    ]);
                }                   
            }
            return true;
        }
        return false;
    } catch( PDOException $e ){
        return $this->errors === true ? $this->error( $e->getMessage() ) : false;
    }
}


вызов функции
$call =  $dbConnection->AlterJSON( $BillID, $CurrentPrice,$id, 'price','id', $ProductPrice );
print_r(var_dump($call));

Richard MacCutchan

Использовать отладчик, чтобы проверить значения, которые вы сравниваете.

Gerry Schmitz

PHP начинался как чье-то хобби.

0 Ответов