php explode

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Michael vanDijk

Michael vanDijk

30/10/2020 22:42:58
Quote Anchor link
Hoi allemaal

ik heb een veld in een xml feed waar de volgende info instaat
<description>Start Van De Motor Set USB ID: 6F22683C19 Time: 30-10-2020 21:18:40 CET Engine Hours: 3083:27:00 </description>


nou wil ik het in de volgende stukken delen
tot aan Set USB (dit kan variable zijn)
gedeelte van SET USB tot aan Time
Gedeelte Time tot aan Engine
engine gedeelte


nou heb ik al geprobeerd dit met de volgende code te doen

$test01 = $item->description;
$result = explode("SET", $test01);
$result2 = explode("Time:", $test01);
$result3 = explode("Engine", $test01);
Maar dan krijg ik lege array's

waarschijnlijk gebruik ik ook niet de goede functie hiervoor maar zou niet weten welke ik het beste ervoor kan gebruiken

iemand die me beetje op weg kan helpen?
 
PHP hulp

PHP hulp

09/11/2024 03:07:18
 
Rob Doemaarwat

Rob Doemaarwat

30/10/2020 23:40:10
Quote Anchor link
Ik zou dit met een regular expression doen:
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
<?php
$value
= 'Start Van De Motor Set USB ID: 6F22683C19 Time: 30-10-2020 21:18:40 CET Engine Hours: 3083:27:00';

if(preg_match('/^(.*) Set USB (.*) Time: (.*) Engine (.*)$/',$value,$match)){
  print_r($match);
/*
  $match[1] => Start Van De Motor
  $match[2] => ID: 6F22683C19
  $match[3] => 30-10-2020 21:18:40 CET
  $match[4] => Hours: 3083:27:00
*/

}

?>
 
Thomas van den Heuvel

Thomas van den Heuvel

31/10/2020 13:18:43
Quote Anchor link
Voel me toch genoodzaakt om op te merken dat het hier een XML-feed betreft, en dan wordt alle data ongestructureerd in een enkel element geplempt. Dan heb je toch niet helemaal begrepen waar XML voor bedoeld is :s.

Zelfs als het een description betreft, hierin staan allerhande specs die blijkbaar relevant zijn. Dat rechtvaardigt dan toch enige structuur. En als de spec van dit XML-document dan zodanig is dat je hier geen aparte velden voor in kunt voegen, dan kun je toch op zijn minst zorgen voor enige structuur in deze data? :/

De oplossing van @Rob zal overigens alleen werken als alle descriptions dit (precieze) format hebben.
 
Rob Doemaarwat

Rob Doemaarwat

31/10/2020 14:56:28
Quote Anchor link
Als het format redelijk vast is, maar de variatie "SET" / "Set" geen schrijffout was, dan kun je dit nog opvangen door de regex hoofdletter ongevoelig te maken door er een "i" achter te zetten.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
preg_match('/^(.*) Set USB (.*) Time: (.*) Engine (.*)$/i',$value,$match)

Ook kleine variaties kun je nog wel opvangen (door ze optioneel te maken in de regex - door er een vraagteken achter te zetten; en zo zijn er nog wel meer mogelijkheden), maar dan wordt het langzamerhand wel een beetje "voodoo". Dan kun je inderdaad beter gaan kijken of je de data niet gewoon gestructureerder aangeleverd kunt krijgen (als je daar al invloed op hebt).
 
Michael vanDijk

Michael vanDijk

01/11/2020 12:30:11
Quote Anchor link
Deze xml bestand haal ik op van een server van een leverancier.. dus heb hier geen invloed op...

ik wil alleen de data hebben zodat ik wat meer met de data kan doen.

maar je hebt helemaal gelijk de structuur is niet zoals het hoort, maar daarom wilde ik ook de data eruit kunnen filteren.


Thomas van den Heuvel op 31/10/2020 13:18:43:
Voel me toch genoodzaakt om op te merken dat het hier een XML-feed betreft, en dan wordt alle data ongestructureerd in een enkel element geplempt. Dan heb je toch niet helemaal begrepen waar XML voor bedoeld is :s.

Zelfs als het een description betreft, hierin staan allerhande specs die blijkbaar relevant zijn. Dat rechtvaardigt dan toch enige structuur. En als de spec van dit XML-document dan zodanig is dat je hier geen aparte velden voor in kunt voegen, dan kun je toch op zijn minst zorgen voor enige structuur in deze data? :/

De oplossing van @Rob zal overigens alleen werken als alle descriptions dit (precieze) format hebben.




Toevoeging op 01/11/2020 13:22:41:

Rob Doemaarwat op 30/10/2020 23:40:10:
Ik zou dit met een regular expression doen:
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
<?php
$value
= 'Start Van De Motor Set USB ID: 6F22683C19 Time: 30-10-2020 21:18:40 CET Engine Hours: 3083:27:00';

if(preg_match('/^(.*) Set USB (.*) Time: (.*) Engine (.*)$/',$value,$match)){
  print_r($match);
/*
  $match[1] => Start Van De Motor
  $match[2] => ID: 6F22683C19
  $match[3] => 30-10-2020 21:18:40 CET
  $match[4] => Hours: 3083:27:00
*/

}

?>



ik krijg het niet helemaal voor elkaar

ik heb nu $test = (preg_match('/^(.*) Set USB (.*) Time: (.*) Engine (.*)$/',$item->description,$match));
// alleen om te testen
print_r($test);
print_r($match);

$test1 = $match[1];
$test2 = $match[2];
$test3 = $match[3];
$test4 = $match[4];
maar de array blijft leeg terwijl $item->description wel goed is.
 
Rob Doemaarwat

Rob Doemaarwat

01/11/2020 13:50:09
Quote Anchor link
Ik neem aan dat je met "de array blijft leeg" de $match bedoelt? Geef eens een exacte dump van $item->description (en voor de zekerheid toch ook maar van $match).
 
Adoptive Solution

Adoptive Solution

01/11/2020 13:57:39
Quote Anchor link
Twee manieren om resultaat te krijgen.

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
<?php
$xml
= <<< XML
[code]<?xml version="1.0" encoding="utf-8"?>

<product>
<description>Start Van De Motor Set USB ID: 6F22683C19 Time: 30-10-2020 21:18:40 CET Engine Hours: 3083:27:00 </description>
</product>
XML;
$item = simplexml_load_string( $xml );
if( preg_match('/^(.*) Set USB ID: (.*) Time: (.*) Engine Hours: (.*)$/', $item->description, $match ) )
{
    echo '<pre>' . print_r( $match, TRUE ) . '</pre>';
}
foreach ( $match as $key => $value )
{
    echo $key . ' = ' . $value . '<br />';
}
?>

<?php
$test
= preg_match('/^(.*) Set USB (.*) Time: (.*) Engine (.*)$/', $item->description, $match ) ;
// alleen om te testen
echo '<pre>' . print_r( $test, TRUE ) . '</pre>';
echo '<pre>' . print_r( $match, TRUE ) . '</pre>';

$test1 = $match[1];
$test2 = $match[2];
$test3 = $match[3];
$test4 = $match[4];

echo '<p>' .
$test1 . '<br >' .
$test2 . '<br />' .
$test3 . '<br />' .
$test4 .
'</p>';
?>


Toevoeging op 01/11/2020 14:03:56:

De code tag in regel 3 hoort daar niet.
Die wordt door de forum software toegevoegd.
Gewijzigd op 01/11/2020 14:02:41 door Adoptive Solution
 
Michael vanDijk

Michael vanDijk

01/11/2020 14:12:03
Quote Anchor link
https://www.site.com/user_rss_feed.php dit is de link die ik ophaal alleen moet je inloggen om het te zien dus zie user_rss_feed.php.xml voor wat ik op het scherm krijg.

@Adoptive Solution deze code werkt goed maar niet als ik de link erin verwerk dan krijg ik +
Warning: simplexml_load_string(): Entity: line 1: parser error : Start tag expected, '<' not found in /httpdocs/power/feed.php on line 49

Warning: simplexml_load_string(): https://www.site.com/user_rss_feed.php in /httpdocs/power/feed.php on line 49

Warning: simplexml_load_string(): ^ in httpdocs/power/feed.php on line 49
Gewijzigd op 02/11/2020 11:39:30 door Michael vanDijk
 
- Ariën  -
Beheerder

- Ariën -

01/11/2020 15:02:57
Quote Anchor link
Error zegt het al, de start-tag begint niet met <. Ik gok dat je de UBB-tags meeneemt?
 
Thomas van den Heuvel

Thomas van den Heuvel

01/11/2020 15:08:07
Quote Anchor link
@Michael mogelijk komt dat omdat het codeblok hierboven foutief een [code] tag invoegt op regel 3. Als je deze verwijdert lijkt het wel/beter te werken.
 
Michael vanDijk

Michael vanDijk

02/11/2020 10:03:57
Quote Anchor link
Thomas van den Heuvel op 01/11/2020 15:08:07:
@Michael mogelijk komt dat omdat het codeblok hierboven foutief een [code] tag invoegt op regel 3. Als je deze verwijdert lijkt het wel/beter te werken.


die had ik netjes verwijderd..
ik denk dat het komt omdat het een .php bestand is die ik ophaal die een xml output ?
 
- Ariën  -
Beheerder

- Ariën -

02/11/2020 10:06:15
Quote Anchor link
Echo eens $xml.
Dan weet je wat er in zit.
 
Michael vanDijk

Michael vanDijk

02/11/2020 10:13:22
Quote Anchor link
$url = 'https://www.site.com/user_rss_feed.php';

het zit hem in $item = simplexml_load_string( $url );

want als ik hem echo dan krijg ik de link te zien...
simplexml_load_string moet iets zijn die een bestand kan lezen niet string?
Gewijzigd op 02/11/2020 11:38:34 door Michael vanDijk
 
- Ariën  -
Beheerder

- Ariën -

02/11/2020 10:23:11
Quote Anchor link
Gebruik eens simplexml_load_file.
Of gebruik cURL wat flexibeler is.
Gewijzigd op 02/11/2020 10:23:48 door - Ariën -
 
Michael vanDijk

Michael vanDijk

02/11/2020 10:35:53
Quote Anchor link
ik heb nu dit
$url = '';

$context = stream_context_create(array('http' => array('header' => 'Accept: application/xml')));
$rss = Feed::loadRss($url, $user, $pass);

$xml = file_get_contents($url, false, $context);

$item = simplexml_load_file( $xml );




ik ga ff testen met curl

Toevoeging op 02/11/2020 10:42:12:

Warning: simplexml_load_file(https://www.site.com/user_rss_feed.php): failed to open stream: HTTP request failed! HTTP/1.0 401 Unknown infeed.php on line 13
Gewijzigd op 02/11/2020 11:38:18 door Michael vanDijk
 
- Ariën  -
Beheerder

- Ariën -

02/11/2020 10:56:07
Quote Anchor link
Een 401 header. Je moet je op een bepaalde manier authenticeren via HTTP Authenticatie.
Gewijzigd op 02/11/2020 10:57:42 door - Ariën -
 
Michael vanDijk

Michael vanDijk

02/11/2020 11:06:38
Quote Anchor link
zie onderste post
Gewijzigd op 02/11/2020 11:37:40 door Michael vanDijk
 
- Ariën  -
Beheerder

- Ariën -

02/11/2020 11:19:30
Quote Anchor link
Echo eens wat er in $data zit?
 
Michael vanDijk

Michael vanDijk

02/11/2020 11:21:12
Quote Anchor link
zie onderste post
Gewijzigd op 02/11/2020 11:37:52 door Michael vanDijk
 
- Ariën  -
Beheerder

- Ariën -

02/11/2020 11:40:45
Quote Anchor link
Geef even de output van $data. Dit moet een XML-feed zijn. Verder is het ook ongewenst om halverwege een bericht weg te editen.
Gewijzigd op 02/11/2020 11:41:32 door - Ariën -
 
Michael vanDijk

Michael vanDijk

02/11/2020 11:44:01
Quote Anchor link
oke ben al aardig op weg nu ik heb nu dat ik andere waardes krijg van de xml

ik krijg nu deze output :
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [version] => 2.0
        )

    [channel] => SimpleXMLElement Object
        (
            [title] => site
            [link] => http://www.site.com/
            [description] => site Events RSS Feed
            [pubDate] => Mon, 02 Nov 2020 10:36:17 +0000
            [lastBuildDate] => Mon, 02 Nov 2020 10:36:17 +0000
            [ttl] => 5
            [item] => Array
                (
                    [0] => SimpleXMLElement Object
                        (
                            [title] => 150-006 XAS: 150-006 XAS - Fuel Monitor Event End Fill 48%
                            [description] => Fuel Monitor Event End Fill 48%
        
        
                            Set USB ID: 6F22683C19
        
                            Time: 02-11-2020 11:29:05 CET
        
                            Engine Hours: 3137:24:00
        
                            [pubDate] => Mon, 02 Nov 2020 10:29:05 +0000
                            [enclosure] => SimpleXMLElement Object
                                (
                                    [@attributes] => Array
                                        (
                                            [url] => http://www.site.com/style/default/logo.png
                                            [length] => 1465
                                            [type] => image/png
                                        )

                                )

                            [alertColour] => http://www.site.com/style/default/logo.png
                        )

                    [1] => SimpleXMLElement Object
                        (
                            [title] => 150-006 XAS: 150-006 XAS - Fuel Monitor Event Start Fill 47%
                            [description] => Fuel Monitor Event Start Fill 47%
        
        
                            Set USB ID: 6F22683C19
        
                            Time: 02-11-2020 11:29:04 CET
        
                            Engine Hours: 3137:24:00
        
                            [pubDate] => Mon, 02 Nov 2020 10:29:04 +0000
                            [enclosure] => SimpleXMLElement Object
                                (
                                    [@attributes] => Array
                                        (
                                            [url] => http://www.site.com/style/default/logo.png
                                            [length] => 1465
                                            [type] => image/png
                                        )

                                )

                            [alertColour] => http://www.site.com/style/default/logo.png
                        )

                  


met deze code
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
<?php
include_once "src/Feed.php";
$user = "user";
$pass = "pass";
$servername = "localhost";
$username = "user";
$password = "pass";
$dbname = "user";


$usernamehttp = 'user';
$passwordhttp = 'pass';

$url = "https://www.site.com/user_rss_feed.php";

$context = stream_context_create(array(
    'http' => array(
        'header'  => "Authorization: Basic " . base64_encode("$usernamehttp:$passwordhttp")
    )
));

$data = file_get_contents($url, false, $context);
$data = simplexml_load_string( $data );

foreach ($data->channel as $item) {                
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
}

$check_timestamp = ("SELECT * FROM 'feed' WHERE timestamp = '" . (int)$item->timestamp . "' LIMIT 1");

echo "<pre>";
print_r($data);
echo "</pre>";
//$check_timestamp = SELECT * FROM feed WHERE timestamp =''. $item->timestamp. '' LIMIT 1;
if ($check_timestamp < 1) {
echo "er is al een timestamp aanwezig<br />";

}

else  {
//echo "er is nog geen timestamp aanwezig<br />";
$value = $item->description;
preg_match('/^(.*) Set USB (.*) Time: (.*) Engine (.*)$/i', $value, $match);


  $test1 = $match[1];
  $test2 = $match[2];
  $test3 = $match[3];
  $test4 = $match[4];

$sql = "INSERT INTO feed (timestamp, title, description, match1, match2, match3, match4)
VALUES ('"
. $item->timestamp ."', '". $item->title ."', '". $item->description ."', '". $test1 ."', '". $test2 ."', '". $test3 ."', '". $test4 ."')";
if ($conn->query($sql) === TRUE) {
  echo "New record created successfully<br />";
}

else {
  echo "Error: " . $sql . "<br>" . $conn->error;
  $conn->close();

  }
}
}


$item = simplexml_load_string( $data );
if( preg_match('/^(.*) Set USB ID: (.*) Time: (.*) Engine Hours: (.*)$/', $item->description, $match ) )
{

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

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

    echo $key . ' = ' . $value . '<br />';
}


$test = preg_match('/^(.*) Set USB (.*) Time: (.*) Engine (.*)$/', $item->description, $match ) ;
// alleen om te testen
echo '<pre>' . print_r( $test, TRUE ) . '</pre>';
echo '<pre>' . print_r( $match, TRUE ) . '</pre>';

$test1 = $match[1];
$test2 = $match[2];
$test3 = $match[3];
$test4 = $match[4];

echo '<p>' .
$test1 . '<br >' .
$test2 . '<br />' .
$test3 . '<br />' .
$test4 .
'</p>';
?>


nou is alleen het "probleem"dat ik keek in de database of timestamp bestond en zo wist dat er al een record was..
nu krijg ik die niet meer mee...

daarentegen krijg ik wel pubdate.

maar moet ik die dan eerst omzetten om daar een goede datum van te krijgen ?



Toevoeging op 02/11/2020 11:45:37:

- Ariën - op 02/11/2020 11:40:45:
Geef even de output van $data. Dit moet een XML-feed zijn. Verder is het ook ongewenst om halverwege een bericht weg te editen.


sorry ik wilde het overzichtelijk houden met welke code er nu is, daarom had ik een nieuwe post gemaakt met wat ik nu heb totaal en de output zoals hij nu is ;-) zal het niet meer doen
Gewijzigd op 02/11/2020 11:46:29 door Michael vanDijk
 

Pagina: 1 2 volgende »



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.