Hulp nodig met complexe string splitting

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ruben grande

Ruben grande

13/12/2021 17:20:50
Quote Anchor link
Hallo mensen,

Misschien kan iemand mij helpen ik ben best stupid en kan het probleem niet op internet vinden. In het script gaat wat fout tijdens het decoderen maar ik weet niet zo goed wat. Ik krijg een complexe string maar alles met IS_X_AVAILABLE zou ik losse kolommen moeten komen. Ik krijg nu één lap tekst die totaal niet in kolommen zit. Kan iemand mij verder helpen? Ik krijg wat foutmelding op line 45,46,48 deze lijnen zijn hieronder weergegeven. De data die ik in kolommen wil splitten staat ook hieronder weergegeven. Ik moet de data uiteindelijk in kolommen in mysql zien te krijgen ik weet alleen niet hoe en heb het één en ander geprobeerd. Misschien kan iemand mij helpen/richtlijnen geven? ik denk dat er iets fout gaat met het decoden van json. In het onderstaande voorbeeld probeerde ik IS_CATV_AVAILABLE data in een kolom te krijgen ik kreeg wel de kolom IS_CATV_AVAILABLE in mysql maar de data werd niet gedecodeerd en kreeg gewoon een hele lap met hieronder dus.

{"data":{"ID":"1213AP1","IS_CATV_AVAILABLE":{"isAvailable":true,"errors":[]},"IS_DTV_AVAILABLE":{"isAvailable":true,"errors":[]},"IS_INT_AVAILABLE":{"isAvailable":true,"errors":[]},"IS_FAST_AVAILABLE":{"isAvailable":true,"errors":[]},"IS_GIGA_AVAILABLE":{"isAvailable":true,"errors":[]},"IS_VOIP_AVAILABLE":{"isAvailable":true,"errors":[]},"PAID":"PAID-102.243.827"}}


45 $pcArr[$k]['adress_check']= $decoded_string->zipCode . " / " . $decoded_string->houseNumber . " / " . $decoded_string->houseNumberExt;
46 $pcArr[$k]['footprint']= $decoded_string->footprint;

[48] foreach ($decoded_string->availability as $product){
if ($product->name=="fp500") $pcArr[$k]['fp500']= $product->available;
elseif ($product->name=="fp200") $pcArr[$k]['fp200']= $product->available;
elseif ($product->name=="internet") $pcArr[$k]['internet']= $product->available;
elseif ($product->name=="IS_CATV_AVAILABLE") $pcArr[$k]["IS_CATV_AVAILABLE"]= $product->available;

hartelijk dank legendes hopelijk kunnen jullie mij wat hoop geven
 
PHP hulp

PHP hulp

28/09/2022 15:10:14
 
Ivo P

Ivo P

13/12/2021 17:27:21
Quote Anchor link
Dit is json:

stop je string om te beginnen in de site https://jsonformatter.curiousconcept.com/#

Je ziet dan in elk geval overzichtelijk wat erin zit.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$dataset
= json_decode($jouwString);
echo '<pre>'. print_r($dataset, 1) . '</pre>';
?>


Toont hetzelfde, maar dan in PHP.
 
Ruben grande

Ruben grande

13/12/2021 18:20:15
Quote Anchor link
Top heb ik gedaan dit krijg ik eruit maar ik moet elk ding in een kolom zien te krijgen. De dikgedrukte gedeelte is wat in jsonformatter in het rood weergeeft.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?php
$dataset
= json_decode({
   "data":{
      "ID":"1325GD10",
      "IS_CATV_AVAILABLE":{
         "isAvailable":true,
         "errors":[
            
         ]
      },

      "IS_DTV_AVAILABLE":{
         "isAvailable":true,
         "errors":[
            
         ]
      },

      "IS_INT_AVAILABLE":{
         "isAvailable":true,
         "errors":[
            
         ]
      },

      "IS_FAST_AVAILABLE":{
         "isAvailable":true,
         "errors":[
            
         ]
      },

      "IS_GIGA_AVAILABLE":{
         "isAvailable":true,
         "errors":[
            
         ]
      },

      "IS_VOIP_AVAILABLE":{
         "isAvailable":true,
         "errors":[
            
         ]
      },

      "PAID":"PAID-142.285.780"
   }
[
b]}");
echo""<pre>"". print_r($dataset"
,
1) ."</pre>"";
?>
"[/b]
Gewijzigd op 13/12/2021 18:49:02 door - Ariën -
 
- Ariën  -
Beheerder

- Ariën -

13/12/2021 18:49:46
Quote Anchor link
UBB-tags in een codeblok gaan niet werken ;-)
Gelukkig hebben we wel toffe regelnummering.
 
Ruben grande

Ruben grande

13/12/2021 20:01:01
Quote Anchor link
- Ariën - op 13/12/2021 18:49:46:
UBB-tags in een codeblok gaan niet werken ;-)
Gelukkig hebben we wel toffe regelnummering.


Hoe zou ik dit moeten transformeren? ik heb de basis voor de code niet geschreven.
 
- Ariën  -
Beheerder

- Ariën -

13/12/2021 20:10:19
Quote Anchor link
Als ik kijk zie ik dat je PHP-code vetgedrukt wou formatteren?
Maar wat heeft dat volgens jouw te maken met JSON-formatter?
Gewijzigd op 13/12/2021 20:10:58 door - Ariën -
 
Ruben grande

Ruben grande

13/12/2021 20:12:28
Quote Anchor link
- Ariën - op 13/12/2021 20:10:19:
Als ik kijk zie ik dat je PHP-code vetgedrukt wou formatteren?
Maar wat heeft dat volgens jouw te maken met JSON-formatter?



Ik heb geen idee ik moet alles opgesplitst krijgen in kolommen maar ik krijg steeds een lap tekst misschien gaat er wat fout in de loop.
 
- Ariën  -
Beheerder

- Ariën -

13/12/2021 20:16:06
Quote Anchor link
Ben je bekend met met foreach en array's?
Dan kan je die kolommen toch gewoon uitlezen en INSERT'en of UPDATE'en?

Houd tijdens het ontwikkelen die print_r() er eens bij met je array-boom en kijk eens waar je data daarin staat.
Gewijzigd op 13/12/2021 20:19:06 door - Ariën -
 
Adoptive Solution

Adoptive Solution

14/12/2021 09:22:09
Quote Anchor link
Is dit de bedoeling?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
$categories
= (object)[
    'ID' => 'ID',
    'IS_CATV_AVAILABLE' => 'CATV',
    'IS_DTV_AVAILABLE'  => 'DTV',
    'IS_INT_AVAILABLE'  => 'INT',
    'IS_FAST_AVAILABLE' => 'FAST',
    'IS_GIGA_AVAILABLE' => 'GIGA',
    'IS_VOIP_AVAILABLE' => 'VOIP',
    'PAID' => 'Betaald'
];

$json = '{"data":{"ID":"1213AP1","IS_CATV_AVAILABLE":{"isAvailable":true,"errors":[]},"IS_DTV_AVAILABLE":{"isAvailable":true,"errors":[]},"IS_INT_AVAILABLE":{"isAvailable":true,"errors":[]},"IS_FAST_AVAILABLE":{"isAvailable":false,"errors":[]},"IS_GIGA_AVAILABLE":{"isAvailable":true,"errors":[]},"IS_VOIP_AVAILABLE":{"isAvailable":true,"errors":[]},"PAID":"PAID-102.243.827"}}';

$dataset = json_decode( $json )->data;

echo '<pre>' . print_r( $dataset, TRUE ) . '</pre>';

foreach ( $dataset as $key => $value )
{

    if ( isset( $value->isAvailable ) )
    {

        echo $categories->{$key} . ' = ' . ( $value->isAvailable ? 'Beschikbaar' : 'Niet beschikbaar' ) . '<br />';
    }
else {
        echo $categories->{$key} . ' = ' . $value . '<br />';
    }
}

?>
 
Ruben grande

Ruben grande

14/12/2021 14:11:49
Quote Anchor link
knip

Damn dat komt al beter in de buurt wat heb je gedaan? die dingen IS_XXX_AVAILABLE moeten in lossen kolommen komen en daarin moet dan uiteindelijk dat beschikbaar niet beschikbaar in komen.

Edit:
Het is niet nodig om het eerst voorgaande bericht integraal te quoten.
Gewijzigd op 14/12/2021 15:36:44 door - Ariën -
 
- Ariën  -
Beheerder

- Ariën -

14/12/2021 15:37:10
Quote Anchor link
Kolommen van een database bedoel je?
 
Adoptive Solution

Adoptive Solution

14/12/2021 16:21:54
Quote Anchor link
Als het uiteindelijk in een database moet komen, zou je de foreach (regel 19-27) kunnen vervangen door :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
$resultaat = [];

foreach ( $dataset as $key => $value )
{
    if ( isset( $value->isAvailable ) )
    {
        $resultaat[$categories->{$key}] = ( $value->isAvailable ? 'Beschikbaar' : 'Niet beschikbaar' );
    } else {
        $resultaat[$categories->{$key}] = $value;
    }
}

echo '<table border="1" style="border-collapse: collapse;">';
echo '<tbody><tr>';
foreach ( $resultaat as $key => $value)
{
    echo '<td style="padding: 0.500em;">' . $key . '<br />' . $value . '</td>';
}
echo '</tr></tbody>';
echo '</table>';

$query  = 'INSERT INTO sales (' . implode( ', ', (array)$categories ) . ')';
$query .= ' VALUES ("';
$query .= implode( '","', $resultaat );
$query .= '" );';
echo $query;
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.