Implode alleen de eerste level van een array, hoe?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Francoi gckx

Francoi gckx

31/12/2013 00:26:01
Quote Anchor link
Ik heb een array met 2 levels de eerste is $errors['personal'][]
nu wil ik de level met ['personal'] buiten de implode laten, hoe doe ik dat?
 
PHP hulp

PHP hulp

21/12/2024 13:13:29
 
Wouter J

Wouter J

31/12/2013 00:34:20
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo implode(', ', $errors['personal']);
?>
 
Francoi gckx

Francoi gckx

31/12/2013 00:40:01
Quote Anchor link
die juist niet
 
Wouter J

Wouter J

31/12/2013 00:51:08
Quote Anchor link
Geef eens een voorbeeld van $errors...
 
Francoi gckx

Francoi gckx

31/12/2013 00:51:42
Quote Anchor link
voorbeeld van output?

Toevoeging op 31/12/2013 00:53:31:

echo implode(",", array_filter($arr, "is_scalar")); is een voorbeeld en ik zou zoiets kunnen gebruiken maar ik weet niet met wat ik "is_scalar" moet vervangen

Toevoeging op 31/12/2013 00:54:23:

Array ( [general] => De velden met een sterretje(*) zijn verplicht. [personal] => Array ( [voornaam] => ! [achternaam] => ! [datum] => ! [telefoon1] => ! ) )

Toevoeging op 31/12/2013 01:12:13:

Misschien helpt dit een beetje de waarde van de nested array heeft "!" values met elkaar in gemeen
 
Ozzie PHP

Ozzie PHP

31/12/2013 02:19:04
Quote Anchor link
Pfff, wat een onduidelijk verhaal.

Wouter J op 31/12/2013 00:51:08:
Geef eens een voorbeeld van $errors...

Dan moet je dus geen code gaan geven, maar een voorbeeld van hoe die array zelf eruit ziet. Wij snappen niet wat jij bedoelt met "levels". En je moet ook uitleggen wat je wilt imploden. Je verhaal is tot nu toe nogal onduidelijk.
 
Eddy E

Eddy E

31/12/2013 08:55:40
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo print_r(implode(array_diff($error, array('personal'), true);
?>


Maar als $error enkel $error['personal'] en $error['general'] bevat, pak dan gewoon alleen $error['general'].

Dus:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo print_r($error['general'], true);
?>
 
Frank Nietbelangrijk

Frank Nietbelangrijk

31/12/2013 10:03:00
Quote Anchor link
Met implode converteer je waardes uit een array naar een strook tekst. Wat daarbij vermeld moet worden is dat niet iedere array hiervoor geschikt is. Heb je bijvoorbeeld een array met objecten dan gaat dat natuurlijk niet. Ook als een array in een array waarde is opgeslagen gaat dat niet meer. In die gevallen zul je vaak gewoon je eigen foreach functie moeten schrijven

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

class Newyear {
    public $content = "Happy newyear!";
}


$array = array(
    new
Newyear(),
    new
Newyear(),
    new
Newyear()
);


$count = 0;
$result = '';

foreach($array as $arr)
{

    if($count)
        $result .= ',';
    
    $result .= $arr->content;

    $count++;
}


echo $result;
?>
Gewijzigd op 31/12/2013 10:04:13 door Frank Nietbelangrijk
 
Wouter J

Wouter J

31/12/2013 11:27:45
Quote Anchor link
Frank, in dat geval zal ik gaan voor array_reduce:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$result
= array_reduce($array, function ($acc, $i) {
    return $acc .= ', '.$i->content;
},
'');
?>
 
Frank Nietbelangrijk

Frank Nietbelangrijk

31/12/2013 11:33:27
Quote Anchor link
Hey Wouter,

Ja dat is met een callback functie toch? Ik mis je argumentatie waarom je het zo zou doen. Is het sneller, is het persoonlijke voorkeur?
 
Dos Moonen

Dos Moonen

31/12/2013 11:54:02
Quote Anchor link
Francoi, zou je een var_dump() van de begin waarde EN een een var_dump() van het gewenste resultaat (zul je handmatig moeten doen) geven? Nu zijn we allemaal aan het speculeren over wat wij denken dat het gewenste resultaat is.

'is_scalar' is de naam van een functie. array_filter() maakt een nieuwe array aan die alleen de waardes bevat waarvoor, in dit geval, de functie is_scalar() TRUE retouneerd. is_scalar() retouneerd alleen TRUE als een variabele van het type int, float, boolean of string is.
$errors['personal'] komt dus niet in het resultaat voor omdat deze een array is.
 
Francoi gckx

Francoi gckx

31/12/2013 12:28:10
Quote Anchor link
Dos Moonen dat met die is_scalar wat ik als bericht plaatsten was een voorbeeld na gezocht te hebben op google ik moet dus een ander callback functie (misschieen 1 zelf maken als dat lukt) dat $errors['personal'] niet in de output komt

@eddy e het is niet enkel die twee (general of personal) ik heb andere ook alleen personal subarray moet er even uit in de output die ik wil hebben. Ik ga even dat bovenste van jou proberen

Toevoeging op 31/12/2013 12:39:20:

UPDATE

@Edde e

Ik heb even jou voorbeeld gebruikt en dit er van gemaakt

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
implode(array_diff($errors, array('personal'), true))


Maar krijg een warning

Warning: array_diff() [function.array-diff]: Argument #3 is not an array
 
Ozzie PHP

Ozzie PHP

31/12/2013 12:46:17
Quote Anchor link
Er is nu al een paar keer aan je gevraagd hoe de array er uit ziet en wat je wilt bereiken. Het is lastig om je verder te helpen als je hier geen antwoord op geeft.
 
Wouter J

Wouter J

31/12/2013 12:48:20
Quote Anchor link
Quote:
Ja dat is met een callback functie toch? Ik mis je argumentatie waarom je het zo zou doen. Is het sneller, is het persoonlijke voorkeur?

Persoonlijke voorkeur, nadat ik ben begonnen met haskell geef ik functies de voorkeur aan language constructs.
 
Francoi gckx

Francoi gckx

31/12/2013 12:52:19
Quote Anchor link
ozzie dat is al lang gegeven: Array ( [general] => De velden met een sterretje(*) zijn verplicht. [personal] => Array ( [voornaam] => ! [achternaam] => ! [datum] => ! [telefoon1] => ! ) )

Alleen er zijn ook nog andere dan [general] en [personal]

Misschien helpt dit een beetje de waarde van de nested array heeft "!" values met elkaar gemeen dus als ik daar op kan filteren
 
Wouter J

Wouter J

31/12/2013 12:58:01
Quote Anchor link
Maar wat wil je nu? De ! aan elkaar binden?

Wat je hierboven hebt gegeven is de input, nu nog graag de verwachte output.
Gewijzigd op 31/12/2013 12:58:31 door Wouter J
 
Francoi gckx

Francoi gckx

31/12/2013 13:02:50
Quote Anchor link
Wouter J ik wil alles in de output Behalve die in personal zit en dus waarde '!'

Ik ben er bijna
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
if(empty($errors) === false)
    {

        echo '<div class="field-box"><span class="errors">', implode(array_diff($errors, array('personal'))), '</span></div>';        
    }

?>


Als ik alleen nog de Notice melding kan oplossen en dat die niet "Array" weergeeft, kijk hieronder

Notice: Array to string conversion in ..bestand.. on line 168
De velden met een sterretje(*) zijn verplicht.Array
 
Wouter J

Wouter J

31/12/2013 13:10:43
Quote Anchor link
Goed, lees die reactie van frank eens. Nu implode je iets als Array([...] => Array(), [...] => Array())

Dat betekend dat je dus een Array aan een Array wilt koppelen als een string, die array moet dus omgezet worden naar een string. Hoe wil je dat doen?
 
Francoi gckx

Francoi gckx

31/12/2013 13:15:13
Quote Anchor link
Converteren naar een string? of is dat een retorische vraag

voor het eerste ga ik google afzoeken naar de functie volgens mij ToString
 
Ozzie PHP

Ozzie PHP

31/12/2013 13:35:55
 
Francoi gckx

Francoi gckx

31/12/2013 14:04:42
Quote Anchor link
Top! Ozzie, dat werkt
 

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.