2017-03-29 2 views
0

Ich habe ein sehr seltsames Problem, dass hoffentlich jemand mir helfen kann. Hier ist, was passiert:Wahrer Wert in falsches Benutzerobjekt dupliziert

Eine Funktion namens processServices wird verwendet, um ein großes Objekt namens "Flug" sowie GET-Werte aus einem Formular auf einer vorherigen Seite, ausgewählte Airline-Dienste zu den entsprechenden Benutzer "Profil" innerhalb hinzuzufügen das Objekt. Es summiert dann auch den Preis der Dienste für diesen bestimmten Benutzer und fügt es dem Objekt hinzu.

Diese Dienste sind dynamisch, aber das ist nicht wirklich relevant, abgesehen davon, dass ich keinen Dienstcode in meiner Funktion erwarten kann und mich auf die Daten verlassen muss. Das PROBLEM ist, dass, wenn ich zwei Benutzer habe und der zweite sich für einen Dienst anmeldet, der erste Benutzer diesen Dienst ebenfalls erhält, obwohl der Dienst des Benutzers auf Null bleibt.

Beispiel für Flugobjekt vor dem Ausführen-Funktion:

[Flight] => stdClass Object 
       (
        [Adults] => Array 
         (
          [0] => stdClass Object 
           (
            [FirstName] => Test 
            [MiddleName] => 
            [LastName] => Account 
            [Services] => stdClass Object 
             (
              [BLND] => 0 
              [EMSA] => 0 
              [PETH] => 0 
              [SVAN] => 0 
              [WCHR] => 0 
             ) 

           ) 

          [1] => stdClass Object 
           (
            [FirstName] => The 
            [MiddleName] => 
            [LastName] => Dude 
            [Services] => stdClass Object 
             (
              [BLND] => 0 
              [EMSA] => 0 
              [PETH] => 0 
              [SVAN] => 0 
              [WCHR] => 0 
             ) 

           ) 

         ) 

        [AdultNum] => 2 
        [Services] => Array 
         (
          [0] => stdClass Object 
           (
            [LogicalFlightID] => 4569 
            [ServiceID] => 0 
            [DepartureDate] => 2017-04-03T00:00:00 
            [OperatingCarrier] => 
            [MarketingCarrier] => 
            [CodeType] => BLND 
            [Description] => Can Choose Own Seat 
            [CurrencyCode] => USD 
            [Amount] => 0.0 
            [AmountActive] => 1 
            [AmountType] => 
            [CategoryID] => 1 
            [SSRCode] => BLND 
            [Display] => 1 
            [MaxCountServiceLevel] => 8 
            [Refundable] => 
            [PNLActive] => 1 
            [CutoffHours] => -1 
            [Commissionable] => 
            [DisplayOrder] => 0 
            [RevenueCategoryID] => 7 
            [IATAStandardCodeType] => 
            [ServiceActive] => 1 
            [MaxCountFlightLevel] => 0 
            [QuantityAvailable] => 8 
            [StartSalesDays] => -1 
            [ApplicableTaxes] => stdClass Object 
             (
             ) 

            [BoardingPassSsrOrder] => 999 
            [Name] => Blind Passenger 
           ) 

          [1] => stdClass Object 
           (
            [LogicalFlightID] => 4569 
            [ServiceID] => 0 
            [DepartureDate] => 2017-04-03T00:00:00 
            [OperatingCarrier] => 
            [MarketingCarrier] => 
            [CodeType] => EMSA 
            [Description] => 
            [CurrencyCode] => USD 
            [Amount] => 0.0 
            [AmountActive] => 1 
            [AmountType] => Flat Fee 
            [CategoryID] => 221 
            [SSRCode] => EMSA 
            [Display] => 1 
            [MaxCountServiceLevel] => 1 
            [Refundable] => 1 
            [PNLActive] => 1 
            [CutoffHours] => 0 
            [Commissionable] => 
            [DisplayOrder] => 0 
            [RevenueCategoryID] => 7 
            [IATAStandardCodeType] => 
            [ServiceActive] => 1 
            [MaxCountFlightLevel] => 1 
            [QuantityAvailable] => 1 
            [StartSalesDays] => -1 
            [ApplicableTaxes] => stdClass Object 
             (
             ) 

            [BoardingPassSsrOrder] => 999 
            [Name] => Emotional Support Animal 
           ) 

          [2] => stdClass Object 
           (
            [LogicalFlightID] => 4569 
            [ServiceID] => 0 
            [DepartureDate] => 2017-04-03T00:00:00 
            [OperatingCarrier] => 
            [MarketingCarrier] => 
            [CodeType] => PETH 
            [Description] => PET IN HOLD 
            [CurrencyCode] => USD 
            [Amount] => 25 
            [AmountActive] => 1 
            [AmountType] => Flat Fee 
            [CategoryID] => 221 
            [SSRCode] => PETH 
            [Display] => 1 
            [MaxCountServiceLevel] => 1 
            [Refundable] => 1 
            [PNLActive] => 
            [CutoffHours] => 0 
            [Commissionable] => 
            [DisplayOrder] => 0 
            [RevenueCategoryID] => 7 
            [IATAStandardCodeType] => 
            [ServiceActive] => 1 
            [MaxCountFlightLevel] => 0 
            [QuantityAvailable] => 0 
            [StartSalesDays] => -1 
            [ApplicableTaxes] => stdClass Object 
             (
             ) 

            [BoardingPassSsrOrder] => 999 
           ) 

          [3] => stdClass Object 
           (
            [LogicalFlightID] => 4569 
            [ServiceID] => 0 
            [DepartureDate] => 2017-04-03T00:00:00 
            [OperatingCarrier] => 
            [MarketingCarrier] => 
            [CodeType] => SVAN 
            [Description] => SERVICE ANIMAL 
            [CurrencyCode] => USD 
            [Amount] => 0.0 
            [AmountActive] => 1 
            [AmountType] => Flat Fee 
            [CategoryID] => 221 
            [SSRCode] => SVAN 
            [Display] => 1 
            [MaxCountServiceLevel] => 1 
            [Refundable] => 1 
            [PNLActive] => 1 
            [CutoffHours] => 0 
            [Commissionable] => 
            [DisplayOrder] => 0 
            [RevenueCategoryID] => 7 
            [IATAStandardCodeType] => 
            [ServiceActive] => 1 
            [MaxCountFlightLevel] => 0 
            [QuantityAvailable] => 0 
            [StartSalesDays] => -1 
            [ApplicableTaxes] => stdClass Object 
             (
             ) 

            [BoardingPassSsrOrder] => 999 
           ) 

          [4] => stdClass Object 
           (
            [LogicalFlightID] => 4569 
            [ServiceID] => 0 
            [DepartureDate] => 2017-04-03T00:00:00 
            [OperatingCarrier] => 
            [MarketingCarrier] => 
            [CodeType] => WCHR 
            [Description] => 
            [CurrencyCode] => USD 
            [Amount] => 0.0 
            [AmountActive] => 1 
            [AmountType] => 
            [CategoryID] => 1 
            [SSRCode] => WCHR 
            [Display] => 1 
            [MaxCountServiceLevel] => 8 
            [Refundable] => 
            [PNLActive] => 1 
            [CutoffHours] => -1 
            [Commissionable] => 
            [DisplayOrder] => 0 
            [RevenueCategoryID] => 7 
            [IATAStandardCodeType] => 
            [ServiceActive] => 1 
            [MaxCountFlightLevel] => 0 
            [QuantityAvailable] => 8 
            [StartSalesDays] => -1 
            [ApplicableTaxes] => stdClass Object 
             (
             ) 

            [BoardingPassSsrOrder] => 999 
            [Name] => Wheelchair (can Climb Stairs And Walk To Chair) 
           ) 

         ) 

       ) 

Unten ist die Funktion. Beachten Sie, dass die get-Daten wie folgt strukturiert sind: service-CODE- #, wobei CODE der eindeutige Code für einen Service ist und # die Benutzer-ID ist (beginnend mit 0 und bis zu 8). So jemand, den Benutzer 1, die ein Haustier in halten wollte einen get Namen wie Service-PETH-0

Funktion haben würde:

function processServices($flight, $get) { 
    $totalCost = 0; 
    for($i=0; $i<$flight->AdultNum; $i++) { 
     $totalCost = 0; 
     foreach($flight->Services as $s) { 
      $code = $s->SSRCode; 
      if ($get['service-'.$code.'-'.$i] == 'yes') { 
       $flight->Adults[$i]->Services->$code = true; 
       $totalCost += $s->Amount; 
      } else { 
       $flight->Adults[$i]->Services->$code = false; 
      } 
     } 
     $flight->Adults[$i]->ServicesTotal = $totalCost; 
     $totalCost = 0; 
    } 

    return $flight; 
} 

In diesem Beispiel ist das Folgende in dem $ _GET Variable:

service-BLND-0=no&service-EMSA-0=no&service-PETH-0=no&service-SVAN-0=no&service-WCHR-0=no&service-BLND-1=no&service-EMSA-1=no&service-PETH-1=yes&service-SVAN-1=no&service-WCHR-1=no&step=4 

Aber aus irgendeinem Grund, nachdem sie mit dieser Funktion die Verarbeitung, das ist das neue Objekt (PETH für beide Benutzer markiert ist, auch wenn es für eine belief sich nur mit Ausweis):

[Flight] => stdClass Object 
       (
        [Adults] => Array 
         (
          [0] => stdClass Object 
           (
            [FirstName] => Test 
            [MiddleName] => 
            [LastName] => Account 
            [Services] => stdClass Object 
             (
              [BLND] => 0 
              [EMSA] => 0 
              [PETH] => 1 
              [SVAN] => 0 
              [WCHR] => 0 
             ) 
            [ServicesTotal] => 0 
           ) 

          [1] => stdClass Object 
           (
            [FirstName] => The 
            [MiddleName] => 
            [LastName] => Dude 
            [Services] => stdClass Object 
             (
              [BLND] => 0 
              [EMSA] => 0 
              [PETH] => 1 
              [SVAN] => 0 
              [WCHR] => 0 
             ) 
            [ServicesTotal] => 25 
           ) 

         ) 

        [AdultNum] => 2 
        [Services] => Array 
         (
          [0] => stdClass Object 
           (
            [LogicalFlightID] => 4569 
            [ServiceID] => 0 
            [DepartureDate] => 2017-04-03T00:00:00 
            [OperatingCarrier] => 
            [MarketingCarrier] => 
            [CodeType] => BLND 
            [Description] => Can Choose Own Seat 
            [CurrencyCode] => USD 
            [Amount] => 0.0 
            [AmountActive] => 1 
            [AmountType] => 
            [CategoryID] => 1 
            [SSRCode] => BLND 
            [Display] => 1 
            [MaxCountServiceLevel] => 8 
            [Refundable] => 
            [PNLActive] => 1 
            [CutoffHours] => -1 
            [Commissionable] => 
            [DisplayOrder] => 0 
            [RevenueCategoryID] => 7 
            [IATAStandardCodeType] => 
            [ServiceActive] => 1 
            [MaxCountFlightLevel] => 0 
            [QuantityAvailable] => 8 
            [StartSalesDays] => -1 
            [ApplicableTaxes] => stdClass Object 
             (
             ) 

            [BoardingPassSsrOrder] => 999 
            [Name] => Blind Passenger 
           ) 

          [1] => stdClass Object 
           (
            [LogicalFlightID] => 4569 
            [ServiceID] => 0 
            [DepartureDate] => 2017-04-03T00:00:00 
            [OperatingCarrier] => 
            [MarketingCarrier] => 
            [CodeType] => EMSA 
            [Description] => 
            [CurrencyCode] => USD 
            [Amount] => 0.0 
            [AmountActive] => 1 
            [AmountType] => Flat Fee 
            [CategoryID] => 221 
            [SSRCode] => EMSA 
            [Display] => 1 
            [MaxCountServiceLevel] => 1 
            [Refundable] => 1 
            [PNLActive] => 1 
            [CutoffHours] => 0 
            [Commissionable] => 
            [DisplayOrder] => 0 
            [RevenueCategoryID] => 7 
            [IATAStandardCodeType] => 
            [ServiceActive] => 1 
            [MaxCountFlightLevel] => 1 
            [QuantityAvailable] => 1 
            [StartSalesDays] => -1 
            [ApplicableTaxes] => stdClass Object 
             (
             ) 

            [BoardingPassSsrOrder] => 999 
            [Name] => Emotional Support Animal 
           ) 

          [2] => stdClass Object 
           (
            [LogicalFlightID] => 4569 
            [ServiceID] => 0 
            [DepartureDate] => 2017-04-03T00:00:00 
            [OperatingCarrier] => 
            [MarketingCarrier] => 
            [CodeType] => PETH 
            [Description] => PET IN HOLD 
            [CurrencyCode] => USD 
            [Amount] => 25 
            [AmountActive] => 1 
            [AmountType] => Flat Fee 
            [CategoryID] => 221 
            [SSRCode] => PETH 
            [Display] => 1 
            [MaxCountServiceLevel] => 1 
            [Refundable] => 1 
            [PNLActive] => 
            [CutoffHours] => 0 
            [Commissionable] => 
            [DisplayOrder] => 0 
            [RevenueCategoryID] => 7 
            [IATAStandardCodeType] => 
            [ServiceActive] => 1 
            [MaxCountFlightLevel] => 0 
            [QuantityAvailable] => 0 
            [StartSalesDays] => -1 
            [ApplicableTaxes] => stdClass Object 
             (
             ) 

            [BoardingPassSsrOrder] => 999 
           ) 

          [3] => stdClass Object 
           (
            [LogicalFlightID] => 4569 
            [ServiceID] => 0 
            [DepartureDate] => 2017-04-03T00:00:00 
            [OperatingCarrier] => 
            [MarketingCarrier] => 
            [CodeType] => SVAN 
            [Description] => SERVICE ANIMAL 
            [CurrencyCode] => USD 
            [Amount] => 0.0 
            [AmountActive] => 1 
            [AmountType] => Flat Fee 
            [CategoryID] => 221 
            [SSRCode] => SVAN 
            [Display] => 1 
            [MaxCountServiceLevel] => 1 
            [Refundable] => 1 
            [PNLActive] => 1 
            [CutoffHours] => 0 
            [Commissionable] => 
            [DisplayOrder] => 0 
            [RevenueCategoryID] => 7 
            [IATAStandardCodeType] => 
            [ServiceActive] => 1 
            [MaxCountFlightLevel] => 0 
            [QuantityAvailable] => 0 
            [StartSalesDays] => -1 
            [ApplicableTaxes] => stdClass Object 
             (
             ) 

            [BoardingPassSsrOrder] => 999 
           ) 

          [4] => stdClass Object 
           (
            [LogicalFlightID] => 4569 
            [ServiceID] => 0 
            [DepartureDate] => 2017-04-03T00:00:00 
            [OperatingCarrier] => 
            [MarketingCarrier] => 
            [CodeType] => WCHR 
            [Description] => 
            [CurrencyCode] => USD 
            [Amount] => 0.0 
            [AmountActive] => 1 
            [AmountType] => 
            [CategoryID] => 1 
            [SSRCode] => WCHR 
            [Display] => 1 
            [MaxCountServiceLevel] => 8 
            [Refundable] => 
            [PNLActive] => 1 
            [CutoffHours] => -1 
            [Commissionable] => 
            [DisplayOrder] => 0 
            [RevenueCategoryID] => 7 
            [IATAStandardCodeType] => 
            [ServiceActive] => 1 
            [MaxCountFlightLevel] => 0 
            [QuantityAvailable] => 8 
            [StartSalesDays] => -1 
            [ApplicableTaxes] => stdClass Object 
             (
             ) 

            [BoardingPassSsrOrder] => 999 
            [Name] => Wheelchair (can Climb Stairs And Walk To Chair) 
           ) 

         ) 

       ) 

Diese Funktion ist die EINZIGE im Code, der diese Werte ändert. Wenn ich die Funktion setze, um sie immer auf false zu setzen, werden alle falsch sein. Irgendeine Hilfe?

Antwort

0

Keine Ahnung, was vor sich geht, aber ich habe nur dieses Bit an der Spitze der for() innerhalb der Funktion hinzugefügt und dann die Dienste gleich dem ServicesTest gesetzt und es repariert.

foreach($flight->Services as $serv) { 
    $code = $serv->SSRCode; 
    $flight->Adults[$i]->ServicesTest->$code = ($get['service-'.$code.'-'.$i] == 'yes' ? true : false); 
} 

... 

$flight->Adults[$i]->Services = $flight->Adults[$i]->ServicesTest;