PHP variabelen maken van array met key en value

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Brecht S

Brecht S

10/12/2014 20:40:47
Quote Anchor link
Ik zit met een array probleem ivm key en values.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
    foreach($retval2 as $k=>$v){
        echo " ".$k." => ".$v."<br>";
    }


Ik zou in die foreach de key en values willen uithalen (en in variabelen steken) zoals:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
echo = "1ste key: ".$value die hoort bij de eerste key;


enz...

Kan iemand mij hiermee verder helpen? Ik heb al vanalles geprobeerd maar het wil maar niet lukken.
Laatst heb ik de extract gebruikt maar dit geeft altijd dezelfde waardes terug bij iedere foreach en dat is ook niet de bedoeling.
 
PHP hulp

PHP hulp

29/04/2024 01:28:12
 
Ozzie PHP

Ozzie PHP

10/12/2014 20:46:41
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php

$retval2
= array();
$retval2['kleur1'] = 'rood';
$retval2['kleur2'] = 'geel';

extract($retval2);

echo $kleur1;
echo '<br>';
echo $kleur2;

?>
Gewijzigd op 10/12/2014 20:46:52 door Ozzie PHP
 
Brecht S

Brecht S

10/12/2014 20:56:28
Quote Anchor link
@Ozzie: ik heb meerdere foreach loops lopen op die pagina die telkens een andere array hebben, dus met die extract krijg ik iedere keer dezelfde waardes bij iedere foreach loop.
De array ziet er als volgt uit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
'key1' => 'rood', 'key2' => 'blauw', ...

Dit is natuurlijk als voorbeeld.
 
Ozzie PHP

Ozzie PHP

10/12/2014 21:01:17
Quote Anchor link
Bekijk mijn voorbeeldje. Je hebt geen foreach loop nodig. (of ik begrijp niet helemaal wat je bedoelt)
 
Brecht S

Brecht S

10/12/2014 21:13:56
Quote Anchor link
Ik post even mijn volledige code. Misschien zie jij beter hoe het in elkaar zit.

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
<?php

require_once 'inc/MCAPI.class.php';
require_once 'inc/config.inc.php'; //contains apikey

$api = new MCAPI($apikey);

$retval = $api->campaigns();

if ($api->errorCode){
    echo "Unable to Pull list of Campaign!";
    echo "\n\tCode=".$api->errorCode;
    echo "\n\tMsg=".$api->errorMessage."\n";
}
else {
    echo sizeof($retval['total'])." Total Campaigns Matched.\n";
    echo sizeof($retval['data'])." Total Campaigns returned:\n";
    echo "<br><br>";
    foreach($retval['data'] as $c){
        echo '<br>';
        echo "Campaign Id: ".$c['id']." - ".$c['title']."&nbsp;|&nbsp;";
        echo "Status: ".$c['status']." - type = ".$c['type']."&nbsp;|&nbsp;";
        echo "sent: ".$c['send_time']." to ".$c['emails_sent']." members";
        echo "<br>";
        
        
        $retval2 = $api->campaignStats($c['id']);

//Met dit alleen lukt het wel:
    
        //foreach($retval2 as $k=>$v){
        //echo " ".$k." => ".$v."<br>";
        //}

//Met dit alleen lukt het dus niet:



extract($retval2);

echo "Verzonden: $emails_sent<br>";
echo "Uitgeschreven: $unsubscribes<br>";
echo "Geopend: $opens<br>";
echo "Hard bounces: $hard_bounces<br>";
echo "Soft bounces: $soft_bounces<br>";
echo "Geopend uniek: $unique_opens<br>";
echo "Clicks: $clicks<br>";
echo "Unieke clicks: $unique_clicks<br>";
echo "users_who_clicked : $users_who_clicked";

    
        }
}


?>


Gebruik ik de foreach lus ipv de extract functie hier dan werkt het wel. Wat gaat er hier fout.
Gewijzigd op 10/12/2014 21:28:16 door Brecht S
 
Ozzie PHP

Ozzie PHP

10/12/2014 21:20:31
Quote Anchor link
Kun je nog eens uitleggen wat je nu precies wil? Hoe zou je willen dat het werkt?
 
Brecht S

Brecht S

10/12/2014 21:30:37
Quote Anchor link
Ik heb de foreach er terug even als comment ingezet. Als je die alleen gebruikt lukt het wel maar als ik die vervang (zoals in mijn code) met de extract lukt het dus niet. Ik krijg bij de verschillende foreach lussen dezelfde waarden die ik uit de extract haal. Vandaar dacht ik aan een combinatie van een foreach loop met de extract waarde. Ik zou je een online voorbeeld willen tonen maar weet niet goed of er een fiddle progje bestaat om codes te posten zoals bvb jsfiddle (maar is alleen voor html en javascript denk ik).
 
Ozzie PHP

Ozzie PHP

10/12/2014 21:44:56
Quote Anchor link
Zet na deze regel:

$retval2 = $api->campaignStats($c['id']);

eens dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php

var_dump($retval2);
exit;

?>

Wat verschijnt er dan op je scherm?
 
Brecht S

Brecht S

10/12/2014 22:32:52
Quote Anchor link
Ik heb wel de exit(); moeten weglaten anders zat ik al vast na de eerste foreach (ik kreeg daar de bool(false) omdat dit een lege campagne was en er dus niks werd teruggestuurd in de array. Daarom heb ik even een detail genomen van 1 foreach loop:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
Campaign Id: 8fdc31614f - LeadMap lanceringscampagne | Status: sent - type = regular | sent: 2014-12-01 03:00:00 to 3232 members
array(21) { ["syntax_errors"]=> float(0) ["hard_bounces"]=> float(26) ["soft_bounces"]=> float(35) ["unsubscribes"]=> float(52) ["abuse_reports"]=> float(1) ["forwards"]=> float(0) ["forwards_opens"]=> float(0) ["opens"]=> float(1373) ["last_open"]=> string(19) "2014-12-10 15:58:41" ["unique_opens"]=> int(876) ["clicks"]=> int(56) ["unique_clicks"]=> int(53) ["users_who_clicked"]=> float(43) ["last_click"]=> string(19) "2014-12-10 15:58:41" ["emails_sent"]=> float(3232) ["unique_likes"]=> float(0) ["recipient_likes"]=> float(0) ["facebook_likes"]=> float(0) ["absplit"]=> array(0) { } ["timewarp"]=> array(0) { } ["timeseries"]=> array(24) { [0]=> array(4) { ["timestamp"]=> string(19) "2014-12-01 03:00:00" ["emails_sent"]=> int(3232) ["unique_opens"]=> int(16) ["recipients_click"]=> int(1) } [1]=> array(4) { ["timestamp"]=> string(19) "2014-12-01 04:00:00" ["emails_sent"]=> int(0) ["unique_opens"]=> int(19) ["recipients_click"]=> int(0) } [2]=> array(4) { ["timestamp"]=> string(19) "2014-12-01 05:00:00" ["emails_sent"]=> int(0) ["unique_opens"]=> int(72) ["recipients_click"]=> int(2) } [3]=> array(4) { ["timestamp"]=> string(19) "2014-12-01 06:00:00" ["emails_sent"]=> int(0) ["unique_opens"]=> int(173) ["recipients_click"]=> int(5) } [4]=> array(4) { ["timestamp"]=> string(19) "2014-12-01 07:00:00" ["emails_sent"]=> int(0) ["unique_opens"]=> int(226) ["recipients_click"]=> int(10) } [5]=> array(4) { ["timestamp"]=> string(19) "2014-12-01 08:00:00" ["emails_sent"]=> int(0) ["unique_opens"]=> int(160) ["recipients_click"]=> int(9) } [6]=> array(4) { ["timestamp"]=> string(19) "2014-12-01 09:00:00" ["emails_sent"]=> int(0) ["unique_opens"]=> int(84) ["recipients_click"]=> int(5) } [7]=> array(4) { ["timestamp"]=> string(19) "2014-12-01 10:00:00" ["emails_sent"]=> int(0) ["unique_opens"]=> int(51) ["recipients_click"]=> int(4) } [8]=> array(4) { ["timestamp"]=> string(19) "2014-12-01 11:00:00" ["emails_sent"]=> int(0) ["unique_opens"]=> int(27) ["recipients_click"]=> int(3) } [9]=> array(4) { ["timestamp"]=> string(19) "2014-12-01 12:00:00" ["emails_sent"]=> int(0) ["unique_opens"]=> int(17) ["recipients_click"]=> int(1) } [10]=> array(4) { ["timestamp"]=> string(19) "2014-12-01 13:00:00" ["emails_sent"]=> int(0) ["unique_opens"]=> int(24) ["recipients_click"]=> int(0) } [11]=> array(4) { ["timestamp"]=> string(19) "2014-12-01 14:00:00" ["emails_sent"]=> int(0) ["unique_opens"]=> int(10) ["recipients_click"]=> int(1) } [12]=> array(4) { ["timestamp"]=> string(19) "2014-12-01 15:00:00" ["emails_sent"]=> int(0) ["unique_opens"]=> int(13) ["recipients_click"]=> int(0) } [13]=> array(4) { ["timestamp"]=> string(19) "2014-12-01 16:00:00" ["emails_sent"]=> int(0) ["unique_opens"]=> int(11) ["recipients_click"]=> int(1) } [14]=> array(4) { ["timestamp"]=> string(19) "2014-12-01 17:00:00" ["emails_sent"]=> int(0) ["unique_opens"]=> int(16) ["recipients_click"]=> int(1) } [15]=> array(4) { ["timestamp"]=> string(19) "2014-12-01 18:00:00" ["emails_sent"]=> int(0) ["unique_opens"]=> int(10) ["recipients_click"]=> int(0) } [16]=> array(4) { ["timestamp"]=> string(19) "2014-12-01 19:00:00" ["emails_sent"]=> int(0) ["unique_opens"]=> int(9) ["recipients_click"]=> int(0) } [17]=> array(4) { ["timestamp"]=> string(19) "2014-12-01 20:00:00" ["emails_sent"]=> int(0) ["unique_opens"]=> int(9) ["recipients_click"]=> int(0) } [18]=> array(4) { ["timestamp"]=> string(19) "2014-12-01 21:00:00" ["emails_sent"]=> int(0) ["unique_opens"]=> int(7) ["recipients_click"]=> int(0) } [19]=> array(4) { ["timestamp"]=> string(19) "2014-12-01 22:00:00" ["emails_sent"]=> int(0) ["unique_opens"]=> int(1) ["recipients_click"]=> int(0) } [20]=> array(4) { ["timestamp"]=> string(19) "2014-12-01 23:00:00" ["emails_sent"]=> int(0) ["unique_opens"]=> int(1) ["recipients_click"]=> int(1) } [21]=> array(4) { ["timestamp"]=> string(19) "2014-12-02 00:00:00" ["emails_sent"]=> int(0) ["unique_opens"]=> int(2) ["recipients_click"]=> int(0) } [22]=> array(4) { ["timestamp"]=> string(19) "2014-12-02 01:00:00" ["emails_sent"]=> int(0) ["unique_opens"]=> int(0) ["recipients_click"]=> int(0) } [23]=> array(4) { ["timestamp"]=> string(19) "2014-12-02 02:00:00" ["emails_sent"]=> int(0) ["unique_opens"]=> int(0) ["recipients_click"]=> int(0) } } }


Regel 1 geeft de eerste waarden uit $retval weer en regel 2 alles wat in $retval2 zit, dus het detail van $retval. Alleen heb ik hier ook veel dubbele waarden die volledig fout zijn.
Gewijzigd op 10/12/2014 22:36:58 door Brecht S
 
Willem vp

Willem vp

11/12/2014 14:10:28
Quote Anchor link
Waarom wil je uberhaupt extract() gebruiken? Je kan net zo goed (waarschijnlijk zelfs beter) rechtstreeks de elementen uit $retval2 dereferencen (dus $retval2['emails_sent'] in plaats van $emails_sent).

Omdat PHP geen block scoping heeft, blijven de door extract() aangemaakte variabelen bestaan nadat de foreach-loop is beëindigd, en dat kan ongewenste bijeffecten hebben.
 
Brecht S

Brecht S

11/12/2014 15:13:37
Quote Anchor link
En inderdaad. Willem vp heeft de oplossing gevonden! Het werkt met $retval2['emails_send'], enz... en ik krijg geen overbodige variabelen meer. Ik was dus veel te ver aan het zoeken blijkbaar. Bedankt man!
Gewijzigd op 11/12/2014 15:14:09 door Brecht S
 



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.