Array samenvoegen
Beste php-ers,
Ik wil graag dat de onderstaande array:
deze array word:
Wat is er gebeurd? Als er meerdere type=tekst achter elkaar zijn dan maakt hij daar een van.
Ik heb het al geprobeerd met de onderstaande code maar ik kom er niet uit.
Wat ik heb:
Ik wil graag dat de onderstaande array:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$array = array(
array('type' => 'open', 'tekst' => 'open1'),
array('type' => 'tekst', 'tekst' => 'tekst '),
array('type' => 'tekst', 'tekst' => 'tekst2 '),
array('type' => 'tekst', 'tekst' => 'tekst3 '),
array('type' => 'tekst', 'tekst' => 'tekst4 '),
array('type' => 'open', 'tekst' => 'open2'),
array('type' => 'tekst', 'tekst' => 'tekst5 '),
array('type' => 'tekst', 'tekst' => 'tekst6 '),
array('type' => 'tekst', 'tekst' => 'tekst7 '),
array('type' => 'sluit', 'tekst' => 'sluit1')
);
?>
$array = array(
array('type' => 'open', 'tekst' => 'open1'),
array('type' => 'tekst', 'tekst' => 'tekst '),
array('type' => 'tekst', 'tekst' => 'tekst2 '),
array('type' => 'tekst', 'tekst' => 'tekst3 '),
array('type' => 'tekst', 'tekst' => 'tekst4 '),
array('type' => 'open', 'tekst' => 'open2'),
array('type' => 'tekst', 'tekst' => 'tekst5 '),
array('type' => 'tekst', 'tekst' => 'tekst6 '),
array('type' => 'tekst', 'tekst' => 'tekst7 '),
array('type' => 'sluit', 'tekst' => 'sluit1')
);
?>
deze array word:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
Wat is er gebeurd? Als er meerdere type=tekst achter elkaar zijn dan maakt hij daar een van.
Ik heb het al geprobeerd met de onderstaande code maar ik kom er niet uit.
Wat ik heb:
Code (php)
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
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
<?php
$array = array(
array('type' => 'open', 'tekst' => 'open1'),
array('type' => 'tekst', 'tekst' => 'tekst '),
array('type' => 'tekst', 'tekst' => 'tekst2 '),
array('type' => 'tekst', 'tekst' => 'tekst3 '),
array('type' => 'tekst', 'tekst' => 'tekst4 '),
array('type' => 'open', 'tekst' => 'open2'),
array('type' => 'tekst', 'tekst' => 'tekst5 '),
array('type' => 'tekst', 'tekst' => 'tekst6 '),
array('type' => 'tekst', 'tekst' => 'tekst7 '),
array('type' => 'sluit', 'tekst' => 'sluit1')
);
$stack = array();
$tekst = '';
for($i = 0; $i < count($array); $i++)
{
if($array[$i]['type'] == 'tekst')
{
for($a = $i; $a < count($array); $a++)
{
if($array[$a]['type'] == 'tekst')
{
$tekst .= $array[$a]['tekst'];
$i++;
}
else
{
$stack[] = array('type' => 'tekst', 'tekst' => $tekst);
$tekst = '';
}
}
$stack[] = array('type' => 'tekst', 'tekst' => $array[$i]['tekst']);
}
else
{
$stack[] = $array[$i];
}
}
print_r($stack);
?>
$array = array(
array('type' => 'open', 'tekst' => 'open1'),
array('type' => 'tekst', 'tekst' => 'tekst '),
array('type' => 'tekst', 'tekst' => 'tekst2 '),
array('type' => 'tekst', 'tekst' => 'tekst3 '),
array('type' => 'tekst', 'tekst' => 'tekst4 '),
array('type' => 'open', 'tekst' => 'open2'),
array('type' => 'tekst', 'tekst' => 'tekst5 '),
array('type' => 'tekst', 'tekst' => 'tekst6 '),
array('type' => 'tekst', 'tekst' => 'tekst7 '),
array('type' => 'sluit', 'tekst' => 'sluit1')
);
$stack = array();
$tekst = '';
for($i = 0; $i < count($array); $i++)
{
if($array[$i]['type'] == 'tekst')
{
for($a = $i; $a < count($array); $a++)
{
if($array[$a]['type'] == 'tekst')
{
$tekst .= $array[$a]['tekst'];
$i++;
}
else
{
$stack[] = array('type' => 'tekst', 'tekst' => $tekst);
$tekst = '';
}
}
$stack[] = array('type' => 'tekst', 'tekst' => $array[$i]['tekst']);
}
else
{
$stack[] = $array[$i];
}
}
print_r($stack);
?>
Gewijzigd op 01/01/1970 01:00:00 door Zero XT
array_merge();
heb je post nietgelezen, maar ik antwoord het naar de naam van je post
heb je post nietgelezen, maar ik antwoord het naar de naam van je post
Misschien is het dan handig om eerst mijn post te lezen;)
array_merge is om 2 array's met elkaar te mergen (smelten).
Ik heb geen 2 array's
Zoals je ook kan zien in de titel van dit topic: Array (zonder s) samenvoegen
Iemand?
array_merge is om 2 array's met elkaar te mergen (smelten).
Ik heb geen 2 array's
Zoals je ook kan zien in de titel van dit topic: Array (zonder s) samenvoegen
Iemand?
Gewijzigd op 01/01/1970 01:00:00 door Zero XT
ik heb is gelezen,
maar ge kunt die toch gwn overschrijven???
want als ge geen array_merge gebruikt, dan verdwijnt de oude array
maar ge kunt die toch gwn overschrijven???
want als ge geen array_merge gebruikt, dan verdwijnt de oude array
is de opbouw altijd op deze manier? open -> 3 tekst array's -> open -> 3 tekst array's end dan sluiten.
Code (php)
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
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
$array1 = array(
array('type' => 'open', 'tekst' => 'open1'),
array('type' => 'tekst', 'tekst' => 'tekst '),
array('type' => 'tekst', 'tekst' => 'tekst2 '),
array('type' => 'tekst', 'tekst' => 'tekst3 '),
array('type' => 'tekst', 'tekst' => 'tekst4 '),
array('type' => 'open', 'tekst' => 'open2'),
array('type' => 'tekst', 'tekst' => 'tekst5 '),
array('type' => 'tekst', 'tekst' => 'tekst6 '),
array('type' => 'tekst', 'tekst' => 'tekst7 '),
array('type' => 'sluit', 'tekst' => 'sluit1')
);
$array2 = array ();
$type = null;
$n = -1;
foreach ($array1 as $v) {
if ($v['type'] != $type) {
if ($n >= 0) {
$array2[$n]['tekst'] = trim ($array2[$n]['tekst']);
}
$type = $v['type'];
$array2[++$n] = array ('type' => $type, 'tekst' => '');
}
$array2[$n]['tekst'] .= ' ' . $v['tekst'];
}
echo '<pre>' . print_r ($array2, true) . '</pre>';
?>
$array1 = array(
array('type' => 'open', 'tekst' => 'open1'),
array('type' => 'tekst', 'tekst' => 'tekst '),
array('type' => 'tekst', 'tekst' => 'tekst2 '),
array('type' => 'tekst', 'tekst' => 'tekst3 '),
array('type' => 'tekst', 'tekst' => 'tekst4 '),
array('type' => 'open', 'tekst' => 'open2'),
array('type' => 'tekst', 'tekst' => 'tekst5 '),
array('type' => 'tekst', 'tekst' => 'tekst6 '),
array('type' => 'tekst', 'tekst' => 'tekst7 '),
array('type' => 'sluit', 'tekst' => 'sluit1')
);
$array2 = array ();
$type = null;
$n = -1;
foreach ($array1 as $v) {
if ($v['type'] != $type) {
if ($n >= 0) {
$array2[$n]['tekst'] = trim ($array2[$n]['tekst']);
}
$type = $v['type'];
$array2[++$n] = array ('type' => $type, 'tekst' => '');
}
$array2[$n]['tekst'] .= ' ' . $v['tekst'];
}
echo '<pre>' . print_r ($array2, true) . '</pre>';
?>
@Jan Koehoorn: Dat is weer een nette oplossing.
Maar kan jij kort uitleggen wat nou het verschil is tussen $n++ en ++$n?
Maar kan jij kort uitleggen wat nou het verschil is tussen $n++ en ++$n?
Hoi SanThe,
ja. De $n++ noemt men een postfix operator. Dat houdt in dat de variabele eerst gebruikt wordt in het statement en vervolgens opgehoogd. ++$n heet een prefix operator. In zo'n geval wordt de var eerst opgehoogd, en dan pas gebruikt.
Edit: kort voorbeeld:
ja. De $n++ noemt men een postfix operator. Dat houdt in dat de variabele eerst gebruikt wordt in het statement en vervolgens opgehoogd. ++$n heet een prefix operator. In zo'n geval wordt de var eerst opgehoogd, en dan pas gebruikt.
Edit: kort voorbeeld:
Code (php)
Gewijzigd op 01/01/1970 01:00:00 door Jan Koehoorn
Perfecte uitleg. Bedankt.
@jan wat gaat dit verschil hebben in de output???
Bij de eerste wordt het $array[0] = 'Hallo wereld!'; en bij de tweede wordt het $array[1] = 'Hallo wereld!';
Kan je uiteraard zelf even uitproberen natuurlijk.
Hartelijk bedankt Jan Koehoorn. Zoals SanThe al zei; een nette oplossing




