Hoe kan ik deze array aanpassen naar wat ik wil
Dat werkt allemaal prima, dit is hoe een voorbeeld array er uit ziet waarmee ik data in de database stop:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Array
(
[Category 1] => Array
(
[0] => Question 1
[1] => Question 2
)
[Category 2] => Array
(
[0] => Question 1
)
[Category 3] => Array
(
[0] => question 1
)
)
(
[Category 1] => Array
(
[0] => Question 1
[1] => Question 2
)
[Category 2] => Array
(
[0] => Question 1
)
[Category 3] => Array
(
[0] => question 1
)
)
Maar nu moet ik ook een sorteer volgorde toevoegen in de database (ik kan elementen sorteren met jQuery sort).
De hele lijst is een formulier die ik serialize:
Die data stuur ik weer door naar mijn PHP script met Ajax.
Vervolgens doe ik dit in PHP om bovenstaande array ($store) te krijgen:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?PHP
$arr = $_POST['lijst'];
// pull off first arr element which is the list name
$title = array_shift($arr);
foreach($arr as $a) {
$val = $a['value'];
// handle category
if($a['name'] == 'category[]') {
// save cat name
$currCat = $val;
// init questions array
$store[$currCat] = [];
}else {
// add question to question array
$store[$currCat][] = $val;
}
}
?>
$arr = $_POST['lijst'];
// pull off first arr element which is the list name
$title = array_shift($arr);
foreach($arr as $a) {
$val = $a['value'];
// handle category
if($a['name'] == 'category[]') {
// save cat name
$currCat = $val;
// init questions array
$store[$currCat] = [];
}else {
// add question to question array
$store[$currCat][] = $val;
}
}
?>
Dit werkte allemaal prima voordat er een sorteervolgorde bij moest. Maar nu die ook wordt meegestuurd is dit hoe mijn array er bijvoorbeeld uit ziet:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Array
(
[Category 1] => Array
(
[0] => Question 1
[1] => Question 2
[2] => 1
)
[Category 2] => Array
(
[0] => Question 1
[1] => 2
)
[Category 3] => Array
(
[0] => question 1
[1] => 3
)
)
(
[Category 1] => Array
(
[0] => Question 1
[1] => Question 2
[2] => 1
)
[Category 2] => Array
(
[0] => Question 1
[1] => 2
)
[Category 3] => Array
(
[0] => question 1
[1] => 3
)
)
Zoals je ziet wordt de sorteervolgorde samen met de vraag onder elke categorie gestopt. Ik kan nu dus in mijn PHP script geen onderscheid maken tussen de twee, wanneer ik een lijst opsla wordt de volgorde als vraag opgeslagen in mijn database.
Eigenlijk zou ik de sorteervolgorde dus niet als oplopende key willen zien maar met een naam zoals [sortorder] zodat ik met een
als resultaat gewoon 1 zie.
Hoe kan ik dat het beste doen?
Een categorie zou er dan zo uit komen te zien:
Dit is mijn array zoals die gepost is naar mijn PHP script, dit is dus hoe hij binnenkomt zonder dat ik nog een aanpassing heb gemaakt:
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
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
Array
(
[0] => Array
(
[name] => sortorder
[value] => 2
)
[1] => Array
(
[name] => category[]
[value] => gsdg
)
[2] => Array
(
[name] => question[]
[value] => dsgsdgsd
)
[3] => Array
(
[name] => sortorder
[value] => 1
)
[4] => Array
(
[name] => category[]
[value] => sdfgsd
)
[5] => Array
(
[name] => question[]
[value] => sdgsd
)
)
(
[0] => Array
(
[name] => sortorder
[value] => 2
)
[1] => Array
(
[name] => category[]
[value] => gsdg
)
[2] => Array
(
[name] => question[]
[value] => dsgsdgsd
)
[3] => Array
(
[name] => sortorder
[value] => 1
)
[4] => Array
(
[name] => category[]
[value] => sdfgsd
)
[5] => Array
(
[name] => question[]
[value] => sdgsd
)
)
Gewijzigd op 19/12/2018 13:36:38 door Snelle Jaap
En als je van de elementen een type bijhoudt (categorie, vraag, whatever) dan kun je tevens tellers mee laten lopen die de volgorde tijdens de verwerking voor je uitrekenen zodat je die kunt opslaan, en op een later moment ook kunt hergebruiken om zo'n lijst bij te werken.
Er zal dan wat meer werk zitten in het opzetten van een dynamisch formulier zodat alles in de goede volgorde de deur uitgaat, maar dat lijkt me een stuk minder complex dan wat je hier probeert te doen. Eerlijk gezegd begrijp ik dat ook niet goed, geen idee hoe ik die sortorder moet interpreteren :p.
Ik heb het al opgelost, dacht inderdaad te moeilijk.
En wat was de oplossing dan? Die van Thomas? ;-)