Explode key in een array en gebruik deel daarvan om te sorteren

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Java Developer / Overheid / Complexiteit

Functieomschrijving Wil jij als Java Developer een bijdrage leveren aan een veiliger Nederland en je als Java Developer bezig houden met zeer complexe bedrijfskritische applicaties? Lees dan snel verder! Doorontwikkelen bedrijfskritische applicaties; Aanpassingen maken in de bestaande applicatie; Vertalen van jouw visie op continuous integration en continuous delivery; Debuggen van de applicatie; In gesprek gaan met eindgebruikers om verbetervoorstellen op te halen. Functie-eisen Minimaal HBO-werk en denkniveau; Minimaal 5 jaar werkervaring als Java Developer; Je bent minimaal OCP-Java SE 6 gercertificeerd; Je hebt kennis van Webservices en Continuous Integration; Je bent analytisch sterk en zowel klant- als resultaatgericht. Bedrijfsomschrijving Binnen

Bekijk vacature »

Technisch Ontwerper / Applicatie Ontwikkelaar

Technisch Ontwerper / Applicatie Ontwikkelaar Actief Wat ga je doen? Als Technisch Ontwerper / Applicatie Ontwikkelaar kom je te werken bij onze gerenommeerde klanten op projecten of opdrachten van omvang en formaat. Je bent verantwoordelijk voor het omzetten van functionele specificaties naar een technisch ontwerp, het ontwerp van programmaspecificaties voor toepassingen, de realisatie van (gewijzigde) programmaonderdelen en databestanden van toepassingen en de technische systeemtest van applicatietoepassingen. Daarnaast geef je vorm aan webpagina’s en applicaties, stel je gebruikersdocumentatie op en verleen je ondersteuning bij het oplossen van productiefouten. Tevens ben je verantwoordelijk voor het samenstellen en onderhouden van de applicatie c.q.

Bekijk vacature »

Senior DevOps-ontwikkelaar eIDAS

Functie­omschrijving Burgers en bedrijven veilig en betrouwbaar digitaal toegang geven tot diensten en producten van het ministerie van Economische Zaken en Klimaat. Als senior DevOps-ontwikkelaar bouw je daar letterlijk aan mee. En dat doe je bij DICTU: een van de grootste en meest vooruitstrevende ICT-dienstverleners van de Rijksoverheid. Jij werkt mee aan de doorontwikkeling van eIDAS, dat staat voor Electronic IDentification Authentication and trust Services. Deze koppeling maakt de grensoverschrijdende authenticatie op overheidswebsites binnen de Europese Unie mogelijk. Het ministerie van Economische Zaken en Klimaat heeft één moderne toegangspoort voor zijn diensten en inspecties. Enkele daarvan zijn dankzij eIDAS inmiddels

Bekijk vacature »

Technisch Ontwerper / Applicatie Ontwikkelaar

Technisch Ontwerper / Applicatie Ontwikkelaar Actief Wat ga je doen? Als Technisch Ontwerper / Applicatie Ontwikkelaar kom je te werken bij onze gerenommeerde klanten op projecten of opdrachten van omvang en formaat. Je bent verantwoordelijk voor het omzetten van functionele specificaties naar een technisch ontwerp, het ontwerp van programmaspecificaties voor toepassingen, de realisatie van (gewijzigde) programmaonderdelen en databestanden van toepassingen en de technische systeemtest van applicatietoepassingen. Daarnaast geef je vorm aan webpagina’s en applicaties, stel je gebruikersdocumentatie op en verleen je ondersteuning bij het oplossen van productiefouten. Tevens ben je verantwoordelijk voor het samenstellen en onderhouden van de applicatie c.q.

Bekijk vacature »

Technisch Ontwerper / Applicatie Ontwikkelaar

Technisch Ontwerper / Applicatie Ontwikkelaar Actief Wat ga je doen? Als Technisch Ontwerper / Applicatie Ontwikkelaar kom je te werken bij onze gerenommeerde klanten op projecten of opdrachten van omvang en formaat. Je bent verantwoordelijk voor het omzetten van functionele specificaties naar een technisch ontwerp, het ontwerp van programmaspecificaties voor toepassingen, de realisatie van (gewijzigde) programmaonderdelen en databestanden van toepassingen en de technische systeemtest van applicatietoepassingen. Daarnaast geef je vorm aan webpagina’s en applicaties, stel je gebruikersdocumentatie op en verleen je ondersteuning bij het oplossen van productiefouten. Tevens ben je verantwoordelijk voor het samenstellen en onderhouden van de applicatie c.q.

Bekijk vacature »

Snelle Jaap

Snelle Jaap

16/11/2018 11:55:23
Quote Anchor link
Ik heb een lijst waar mensen zelf categoriëen en vragen aan kunnen toevoegen. Die vragen zitten dan weer gekoppeld aan de categorie.

Nu moet ik ook de mogelijkheid hebben om te sorteren en dat wil ik als volgt doen:

Dit is nu mijn array wanneer ik de lijst post:

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
Array
(
    [title] => lijsttitle
    [1. categorie] => Array
        (
            [0] => vraag1
        )

    [2. categorie ] => Array
        (
            [0] => vraag1
            [1] => vraag2
        )

)


Deze array genereer ik door mijn form te serializen via jquery/ajax en te posten naar een PHP script.

Daar doe ik vervolgens dit:

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
$arr = $_POST['lijst'];

$store = [];

// pull off first arr element
$title = array_shift($arr);
// save title to store
$store['title'] = $title['name'];

$currCat = '';
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;
  }
}


Via jQuery zet ik voor elke key van de categorie een getal met een punt. Ik wil graag die key exploden op de punt en het getal gebruik in een database column genaamd 'ordering', wanneer ik de lijst sorteer en opsla update hij alle order nummers voor die rij (en trimt de punt zodat de categorie naam zonder cijfer en punt opgeslagen kan worden in de database).

Hoe kan ik dat het beste aanpakken?

Dit is hoe ik mijn formulier post via ajax:

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
$( ".lijstbutton" ).on( "click", function( event ) {
  event.preventDefault();
  url = 'includes/createlist.php';

  $lijst = $( '#lijstform' ).serializeArray();

  var posting = $.post(url, {
    lijst: $lijst
  });

    posting.done(function( data ) {
     $( ".lijstresult" ).empty().slideDown('fast').append( data );
   });
  //console.log( $( '#lijstform' ).serializeArray() );
  });


Het sorteren werkt al, mijn vraag gaat alleen over het exploden van de cijfers zodat ik een sorteervolgorde kan opslaan in mijn database.
 
PHP hulp

PHP hulp

22/09/2020 12:34:50
 
Thomas van den Heuvel

Thomas van den Heuvel

16/11/2018 15:38:28
Quote Anchor link
Kun je dit niet gewoon afleiden uit de volgorde waarin de informatie wordt aangeleverd?

Je creëert zelf dit probleem door informatie die verschillende betekenissen heeft ("volgorde", "categorie") als één geheel te behandelen, en daarna moet je een hoop moeite doen om deze weer uit elkaar te trekken.

Houd deze informatie in eerste instantie gewoon gescheiden, en je hebt dit hele probleem niet.

Daarnaast zijn de manier waarop je informatie opslaat en vervolgens presenteert twee compleet verschillende dingen.

Je kunt hier op een later tijdstip dus prima een cijfer met een punt voor zetten bij de weergave van de informatie. Echter, bij de opslag en verwerking van deze informatie is het veeeeel belangrijker dat je deze in een makkelijk te verwerken format giet... het splitsen en weer combineren van tekst op grond van allerlei condities is niet makkelijk en ook behoorlijk foutgevoelig, doe dit dus bij voorkeur niet.

Oftewel: zorg voor een andere manier om af te kunnen leiden welke positie iets heeft, deze informatie combineren met andere data is een slecht idee.
 
Snelle Jaap

Snelle Jaap

20/11/2018 13:15:00
Quote Anchor link
Thomas van den Heuvel op 16/11/2018 15:38:28:
Kun je dit niet gewoon afleiden uit de volgorde waarin de informatie wordt aangeleverd?

Je creëert zelf dit probleem door informatie die verschillende betekenissen heeft ("volgorde", "categorie") als één geheel te behandelen, en daarna moet je een hoop moeite doen om deze weer uit elkaar te trekken.

Houd deze informatie in eerste instantie gewoon gescheiden, en je hebt dit hele probleem niet.

Daarnaast zijn de manier waarop je informatie opslaat en vervolgens presenteert twee compleet verschillende dingen.

Je kunt hier op een later tijdstip dus prima een cijfer met een punt voor zetten bij de weergave van de informatie. Echter, bij de opslag en verwerking van deze informatie is het veeeeel belangrijker dat je deze in een makkelijk te verwerken format giet... het splitsen en weer combineren van tekst op grond van allerlei condities is niet makkelijk en ook behoorlijk foutgevoelig, doe dit dus bij voorkeur niet.

Oftewel: zorg voor een andere manier om af te kunnen leiden welke positie iets heeft, deze informatie combineren met andere data is een slecht idee.

Dat zou inderdaad beter zijn maar hoe zou ik aan de hand van de volgorde die sorteervolgorde kunnen regelen dan? Kan dat via PHP of voordat het daar aankomt al met jQuery?
 
Thomas van den Heuvel

Thomas van den Heuvel

20/11/2018 16:16:51
Quote Anchor link
Hangt er vanaf? Kunnen mensen zelf hun eigen categorieën beheren? En/of de vragen? Dan zou je een volgorde in een aparte kolom kunnen opslaan. Deze wordt dan in eerste instantie bepaald door "volgorde van aanlevering" en later, als ze dit kunnen herschikken dat ze zelf de volgorde kunnen aanpassen.

Hierbij zou je er ook voor kunnen kiezen om nieuwe items standaard vooraan (in plaats van achteraan) toe te voegen, als dat zinniger zou zijn.

Ben je dit nog nooit eerder tegen gekomen, dat de volgorde van aanlevering afweek van de volgorde waarin je dingen wilt weergeven? Dan heb je dus een extra attribuut nodig waarin je items kunt rangschikken, dat komt eigenlijk vrij vaak voor in relationele databases.
 



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.