[PHP] Database resultaat over meerdere kolommen verdelen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb een database met de tabel "tweets2". Hierin staan 1,3mio tweets, verdeeld over 100 "queries", als volgt:
code:
1
2
3
4
5
query tweet
--------------------------------------------
$AAPL Very $weet net iPhone 5!
$AAPL Steve Jobs --- farewell :'-(
$MSFT Windows 7 is so much better than Vista

Nu wil ik kijken hoeveel tweets ik van elke "query" heb:
PHP:
1
2
3
4
5
6
7
8
9
10
function _tweets_per_ticker() {
  $result = db_query("
    SELECT COUNT(tweet_id) AS tweets, query 
    FROM tweets2 GROUP BY query ORDER BY tweets ASC
  ");
  while($row = db_fetch_object($result)) {
    $rows[] = array($row->query, $row->tweets);
  }
  return theme('tweets_list', $rows);
}

Alleen krijg ik nu 2 lange kolommen:
code:
1
2
3
4
5
6
7
8
9
10
11
$AVP 890
$UNH 1011
$BAX 1098
$OEX 1102
$ETR 1313
$WY  1421
$SLE 1502
$NSC 1581
$XRX 1588
$GD  1600
...etc

Voor de leesbaarheid zou ik graag na elke 5 "queries" (tickers) een nieuwe kolom beginnen, dus:
code:
1
2
3
4
5
$AVP 890   $WY  1421   ...etc
$UNH 1011  $SLE 1502
$BAX 1098  $NSC 1581
$OEX 1102  $XRX 1588
$ETR 1313  $GD  1600

De resulterende array voor de eerste rij:
code:
1
2
3
4
5
6
7
8
9
10
11
// moet worden
array (
  array($AVP, 890, $WY, 1421, ...etc.)
)

// is nu
array (
  array($AVP, 890),
  ...
  array($WY, 1421)
)

Wie heeft er een goede manier om dit op te lossen? Ik was zelf begonnen met een loop te bouwen om de loop die nu de $rows[] array bouwt, maar raakte in de war. Graag een tip, bouwen kan ik zelf wel :)

Acties:
  • 0 Henk 'm!

  • alex3305
  • Registratie: Januari 2004
  • Laatst online: 10:25
Waarom niet gewoon de array slicen door 5 en dan elke array een nieuwe kolom geven?

Acties:
  • 0 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 12-09 10:43

Ventieldopje

I'm not your pal, mate!

Als dit puur is om het leesbaar te krijgen en dus met opmaak te maken heeft zou ik niet in de array zelf gaan kliederen maar gewoon in je template waar je de for(each) loop maakt kijken of je bij de 5 bent en dan een nieuwe regel beginnen oid.

Lijkt me stug dat je die opmaak van de array nodig hebt om je data te verwerken (verwerken != weergeven).

Btw waarom fetch_object als je het toch in een array dumpt, waarom niet (mysql)_fetch_array of in jou geval dan (neem ik aan) db_fetch_array(); Scheelt je een onnodige while loop ;)

PHP:
1
2
3
4
5
6
7
8
function _tweets_per_ticker() {
  $result = db_query("
    SELECT COUNT(tweet_id) AS tweets, query 
    FROM tweets2 GROUP BY query ORDER BY tweets ASC
  ");
  $rows = db_fetch_array($result);
  return theme('tweets_list', $rows);
}

[ Voor 38% gewijzigd door Ventieldopje op 18-10-2011 19:12 ]

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


Acties:
  • 0 Henk 'm!

  • alex3305
  • Registratie: Januari 2004
  • Laatst online: 10:25
Alhoewel het zeker niet de netste, kan het wel de gemakkelijkste oplossing voor dit probleem zijn. In HTML tabellen nieuwe kolommen (td) toevoegen vind ik namelijk altijd nogal een gepruts.

Acties:
  • 0 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 12-09 10:43

Ventieldopje

I'm not your pal, mate!

Wat je ook kan doen is meerdere UL's gebruiken met css float: left. Heb je het zelfde effect ;) Het is de taak van je view om dingen goed weer te geven (bijv. 5 per kolom), niet die van je functie/controller ;)

edit: Nevermind, voorbeeld van mij moest nog wat meer aan gebeuren, bij houden welke regel etc. Mooi klusje voor je zelf, ik moet douchen :+

[ Voor 115% gewijzigd door Ventieldopje op 18-10-2011 19:18 ]

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


Acties:
  • 0 Henk 'm!

  • kwaakvaak_v2
  • Registratie: Juni 2009
  • Laatst online: 02-06 12:29
alex3305 schreef op dinsdag 18 oktober 2011 @ 19:12:
Alhoewel het zeker niet de netste, kan het wel de gemakkelijkste oplossing voor dit probleem zijn. In HTML tabellen nieuwe kolommen (td) toevoegen vind ik namelijk altijd nogal een gepruts.
modulo is je vriend in deze ;)

code:
1
2
3
4
for i=0;i<count(rows);i++){
 if (i%5) tr
 td.row[i]
}


(pseudo code enzo)

Driving a cadillac in a fool's parade.


Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
COUNT(tweet_id) is onduidelijk, je impliceert hiermee dat tweet_id NULL kan zijn. Dat kan niet, dus kun je beter COUNT(*) gebruiken.

Als een user moet wachten op de output van deze query, zou ik hem denormaliseren; in een aparte tabel voor elke query bijhouden hoevaak hij voorkomt.

Acties:
  • 0 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 12-09 10:43

Ventieldopje

I'm not your pal, mate!

Normaal nooit zo bij stil gestaan maar COUNT(*) schijnt nog een stuk sneller te zijn in veel gevallen ook nog, vooral als een kolom niet gedefinieerd is als NOT NULL.

Met je 2e punt ben ik het denk ik niet helemaal mee eens, op die manier kun je toch nooit garanderen dat de waardes uit de andere tabel uit elkaar gaat lopen van hoeveel regels er echt zijn? Bovendien zit je dan met overhead voor het updaten wat denk ik vaker zou gebeuren dan de count en dan nog zou count minder performance impact geven.

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
kwaakvaak_v2 schreef op dinsdag 18 oktober 2011 @ 20:12:
modulo is je vriend in deze ;)

code:
1
2
3
4
for i=0;i<count(rows);i++){
 if (i%5) tr
 td.row[i]
}
Sorry, maar ook na het lezen van de php manual snap ik niet hoe dit mijn probleem oplost. Voor het gemak heb ik het voorbeeld vereenvoudigd:
PHP:
1
2
3
4
$rows = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14);
for ($i=0; $i<count($rows); $i++) {
  if ($i % 5) $output[] = $rows[$i];
}

Ik ben op zoek naar de volgende output:
code:
1
2
3
4
5
$output = array(
  array(0, 1, 2, 3, 4),
  array(5, 6, 7, 8, 9),
  array(10, 11, 12, 13, 14)
);

Dus na 5 items uit $rows moet er een nieuwe array in $output worden aangemaakt. Hoe kan dit dan met modulo?

Acties:
  • 0 Henk 'm!

  • Rainmaker1987
  • Registratie: Juni 2005
  • Laatst online: 08-12-2024
Je moet ook gewoon delen door, ceil en slice gebruiken. Deze leek bij mij wel te werken:

PHP:
1
2
3
4
5
6
7
8
<?php
  $rows = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); 
  $length_cols = 5;
  $output = array();
  for($a = 0; $a < ceil(count($rows) / $length_cols); $a++)
    $output[] = array_slice($rows, $a * $length_cols, $length_cols);   
  print_r($output);
?>


Deze maakt steeds stukjes van 5. Mocht je grotere hoeveelheden willen is het een kwestie van $length_cols aanpassen. (deze kan je uiteraard ook gewoon hardcoded erin gooien)

De verwarring die je hebt met de oplossing van kwaakvaak_v2 is dat hij 5 kolommen en meerdere rijen aanmaakt (elke 5 entries een nieuwe rij) en jij juist maximaal 5 rijen wilt hebben (lijkt mij overigens ook niet praktisch, maargoed ik weet je layout niet)

[ Voor 18% gewijzigd door Rainmaker1987 op 18-10-2011 22:15 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Rainmaker1987 schreef op dinsdag 18 oktober 2011 @ 22:05:
Je moet ook gewoon delen door, ceil en slice gebruiken. Deze leek bij mij wel te werken:

PHP:
1
2
3
4
5
6
7
8
<?php
  $rows = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); 
  $length_cols = 5;
  $output = array();
  for($a = 0; $a < ceil(count($rows) / $length_cols); $a++)
    $output[] = array_slice($rows, $a * $length_cols, $length_cols);   
  print_r($output);
?>


Deze maakt steeds stukjes van 5. Mocht je grotere hoeveelheden willen is het een kwestie van $length_cols aanpassen. (deze kan je uiteraard ook gewoon hardcoded erin gooien)

De verwarring die je hebt met de oplossing van kwaakvaak_v2 is dat hij 5 kolommen en meerdere rijen aanmaakt (elke 5 entries een nieuwe rij) en jij juist maximaal 5 rijen wilt hebben (lijkt mij overigens ook niet praktisch, maargoed ik weet je layout niet)
Hey, thanks voor de uitleg. Ik moet het nu aanpassen naar de werkelijke situatie, maar dat komt wel goed :) Overigens ben ik nu wel benieuwd. De huidige output is als volgt:
code:
1
2
3
 0  1  2  3  4
 5  6  7  8  9
10 11 12 13 14

Maximaal 5 kolommen, en een onbeperkt aantal rijen. Maar wat als ik nu deze matrix wil transponeren? Met andere woorden een output als:
code:
1
2
3
4
5
0 5 10
1 6 11
2 7 12
3 8 13
4 9 14

Met andere woorden: 5 rijen, en een onbeperkt aantal kolommen. In plaats van de getallen van links naar rechts te ordenen, orden je ze hier onder elkaar. De bijbehorende array zou er als volgt uitzien:
code:
1
2
3
4
5
6
array (
  array(0, 5 10),
  array(1, 6, 11),
  array(2, 7, 12),
  ...etc
)

Moet dat dan wel met modulo?

[ Voor 23% gewijzigd door Verwijderd op 18-10-2011 23:34 ]


Acties:
  • 0 Henk 'm!

  • Bee.nl
  • Registratie: November 2002
  • Niet online

Bee.nl

zoemt

Verwijderd schreef op dinsdag 18 oktober 2011 @ 23:13:
Maximaal 5 kolommen, en een onbeperkt aantal rijen. Maar wat als ik nu deze matrix wil transponeren? Met andere woorden een output als:
code:
1
2
3
4
5
0 5 10
1 6 11
2 7 12
3 8 13
4 9 14

Met andere woorden: 5 rijen, en een onbeperkt aantal kolommen. In plaats van de getallen van links naar rechts te ordenen, orden je ze hier onder elkaar. De bijbehorende array zou er als volgt uitzien:
code:
1
2
3
4
5
6
array (
  array(0, 5 10),
  array(1, 6, 11),
  array(2, 7, 12),
  ...etc
)

Moet dat dan wel met modulo?
Nee, dat is niet nodig. Je maakt gewoon een geneste for-loop. De buitenste loop doet de rijen, de binnenste loop doet de kolommen. Het aantal rijen bepaal je aan de hand van het opgegeven aantal kolommen. Per rij worden de keys met 1 opgehoogd en voor elke kolom naar rechts komt er het berekende aantal rijen bij. Als laatste nog een check of de key wel bestaat, want het kan zijn dat de laatste kolom in de matrix niet gevuld is (wanneer het aantal resultaten gedeeld door het aantal gewenste kolommen geen geheel getal oplevert).
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$rows = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14); 
$cols_length = 3;
$output = array();

$rows_length = (int) ceil(count($rows) / $cols_length);

for ($i=0; $i<$rows_length; $i++) {
    for ($j=0; $j<$cols_length; $j++) {
        $key = $i+($j*$rows_length);
        if (array_key_exists($key, $rows)) {
            $output[$i][$j] = $rows[$key];
        }
    }
}
print_r($output);

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bee.nl schreef op woensdag 19 oktober 2011 @ 00:17:
[...]

Nee, dat is niet nodig. Je maakt gewoon een geneste for-loop. De buitenste loop doet de rijen, de binnenste loop doet de kolommen. Het aantal rijen bepaal je aan de hand van het opgegeven aantal kolommen. Per rij worden de keys met 1 opgehoogd en voor elke kolom naar rechts komt er het berekende aantal rijen bij. Als laatste nog een check of de key wel bestaat, want het kan zijn dat de laatste kolom in de matrix niet gevuld is (wanneer het aantal resultaten gedeeld door het aantal gewenste kolommen geen geheel getal oplevert).
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$rows = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14); 
$cols_length = 3;
$output = array();

$rows_length = (int) ceil(count($rows) / $cols_length);

for ($i=0; $i<$rows_length; $i++) {
    for ($j=0; $j<$cols_length; $j++) {
        $key = $i+($j*$rows_length);
        if (array_key_exists($key, $rows)) {
            $output[$i][$j] = $rows[$key];
        }
    }
}
print_r($output);
Thanks! Hierop aansluitend een laatste vraag. Stel dat ik key => value paren verticaal wil ordenen, bijvoorbeeld:
code:
1
2
a 1 c 3 e 5 g 7 i 9
b 2 d 4 f 6 h 8 j 10

Met onderstaande array:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$rows = array(
  'a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5,
  'f' => 6, 'g' => 7, 'h' => 8, 'i' => 9, 'j' => 10
);

$cols_length = 5; 
$rows_length = (int) ceil(count($rows) / $cols_length); // 2
$keys = array_keys($rows); // array(0 => a, 1 => b, 2 => c, ...)
$values = array_values($rows); // array(0 => 1, 1 => 2, 2 => 3, ...)

print_r($values);

$output = array(); 
for ($i = 0; $i < $rows_length; $i++) { 
  for ($j = 0; $j < $cols_length; $j++) { 
    $key = $i + ($j * $rows_length); 
    if (array_key_exists($key, $keys)) { 
      $output[$i][$keys[$i + $j]] = $values[$key]; 
    } 
  } 
} 

print_r($output);

De $output array ziet er wat values betreft OK uit, maar ik krijg de keys niet goed:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Array
(
    [0] => Array
        (
            [c] => 1
            [d] => 3
            [e] => 5
            [f] => 7
            [g] => 9
        )

    [1] => Array
        (
            [d] => 2
            [e] => 4
            [f] => 6
            [g] => 8
            [h] => 10
        )

)

Wat doe ik verkeerd?

Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Ventieldopje schreef op dinsdag 18 oktober 2011 @ 21:30:
Normaal nooit zo bij stil gestaan maar COUNT(*) schijnt nog een stuk sneller te zijn in veel gevallen ook nog, vooral als een kolom niet gedefinieerd is als NOT NULL.
COUNT(*) is alleen sneller wanneer waarde van de NOT NULL kolom die je in COUNT(kolom) gebruikt apart moet worden opgehaald.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
For one: het steeds hier komen vragen. We zitten hier niet om handjes te houden en dit is toch écht met gewoon wat simpel debuggen prima zelf op te lossen (Debuggen: Hoe doe ik dat?).

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Volgens mij kun je gewoon direct af met de functie array_chunk :)

Acties:
  • 0 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 12-09 10:43

Ventieldopje

I'm not your pal, mate!

Ik geloof dat je dit nu al wel 3x op had kunnen lossen als je het gewoon in je view had opgelost en de data zo had gelaten :X

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


Acties:
  • 0 Henk 'm!

  • kwaakvaak_v2
  • Registratie: Juni 2009
  • Laatst online: 02-06 12:29
behalve dat array_chunk hetzelfde kan is de oplossing met geneste loops en checks misschien een tikje overdreven ;)

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$rows = array(
  'a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5,
  'f' => 6, 'g' => 7, 'h' => 8, 'i' => array('woot' => 'toot'), 'j' => 10
);
$rowbreak = 0;
$counter = 0;
foreach ($rows as $key => $val){
    $output[$rowbreak][$key] = $val;
    if ($counter % 5 == 4) {
        $rowbreak++;
    }
    $counter++;
}
echo "<pre>";
var_dump($output);
Ventieldopje schreef op woensdag 19 oktober 2011 @ 10:28:
Ik geloof dat je dit nu al wel 3x op had kunnen lossen als je het gewoon in je view had opgelost en de data zo had gelaten :X
Maakt het uit waar je de loop doet dan? Of je dat nu in een view doet, of je echo'd het direct in je php code. Ik snap je punt wel dat view logica in een view hoort. Maar ik denk dat het essentieler is dat de TS snapt hoe je met arrays in php moet omgaan ;)

[ Voor 33% gewijzigd door kwaakvaak_v2 op 19-10-2011 11:23 . Reden: extra quote.. ]

Driving a cadillac in a fool's parade.


Acties:
  • 0 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 12-09 10:43

Ventieldopje

I'm not your pal, mate!

kwaakvaak_v2 schreef op woensdag 19 oktober 2011 @ 11:21:

[...]


Maakt het uit waar je de loop doet dan? Of je dat nu in een view doet, of je echo'd het direct in je php code. Ik snap je punt wel dat view logica in een view hoort. Maar ik denk dat het essentieler is dat de TS snapt hoe je met arrays in php moet omgaan ;)
Daar moet ik je gelijk in geven ;)

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
kwaakvaak_v2 schreef op woensdag 19 oktober 2011 @ 11:21:
[...]

Maakt het uit waar je de loop doet dan? Of je dat nu in een view doet, of je echo'd het direct in je php code. Ik snap je punt wel dat view logica in een view hoort. Maar ik denk dat het essentieler is dat de TS snapt hoe je met arrays in php moet omgaan ;)
Ik ben idd ermee aan het prutsen. Het volgende werkt bijvoorbeeld:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$rows = array(
  'a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5,
  'f' => 6, 'g' => 7, 'h' => 8, 'i' => 9, 'j' => 10
);

$result = array();
$i = 0;

foreach ($rows as $key => $value) {
  $result[$i % 2][$key] = $value;
  $i++;
}

print_r($result);


Levert op:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Array (
  [0] => Array (
    [a] => 1
    [c] => 3
    [e] => 5
    [g] => 7
    [i] => 9
  )

  [1] => Array (
    [b] => 2
    [d] => 4
    [f] => 6
    [h] => 8
    [j] => 10
  )
)

Ik probeer nu alleen de volgende output te krijgen:

code:
1
2
3
4
Array (
  [0] => Array (a, 1, c, 3, e, 5, g, 7, i, 9)
  [1] => Array(b, 2, d, 4, f, 6, h, 8, 10)
)

Daartoe dacht ik dat het volgende zou werken, maar ik krijg een error: "Warning: array_merge() [function.array-merge]: Argument #1 is not an array in D:\htdocs\test.php on line 12"
PHP:
1
2
3
4
5
6
$result = array();
$i = 0;
foreach($rows as $key => $value) {
  array_merge($result[$i % 2], array($key, $value)); // line 12
  $i++;
}

Ik snap die error niet, want drie regel naar boven definieer ik $result toch als een array (en daarmee $result[2] bijvoorbeeld toch ook)?
RobIII schreef op woensdag 19 oktober 2011 @ 01:37:
[...]
For one: het steeds hier komen vragen. We zitten hier niet om handjes te houden en dit is toch écht met gewoon wat simpel debuggen prima zelf op te lossen.
Ik probeer echt, en hoop dat bovenstaande code - die nu wel werkt - dat bewijst :)

Acties:
  • 0 Henk 'm!

  • kwaakvaak_v2
  • Registratie: Juni 2009
  • Laatst online: 02-06 12:29
denk dat je eerst eens echt uit moet zoeken hoe arrays in php nu echt werken :)

http://php.net/manual/en/language.types.array.php

$blaat[2] zonder inhoud is levert in ieder geval geen array op, misschien moet je die merge anders doen dus..

Driving a cadillac in a fool's parade.


Acties:
  • 0 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 12-09 10:43

Ventieldopje

I'm not your pal, mate!

Verwijderd schreef op woensdag 19 oktober 2011 @ 18:55:
[...]

Ik ben idd ermee aan het prutsen. Het volgende werkt bijvoorbeeld:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$rows = array(
  'a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5,
  'f' => 6, 'g' => 7, 'h' => 8, 'i' => 9, 'j' => 10
);

$result = array();
$i = 0;

foreach ($rows as $key => $value) {
  $result[$i % 2][$key] = $value;
  $i++;
}

print_r($result);


Levert op:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Array (
  [0] => Array (
    [a] => 1
    [c] => 3
    [e] => 5
    [g] => 7
    [i] => 9
  )

  [1] => Array (
    [b] => 2
    [d] => 4
    [f] => 6
    [h] => 8
    [j] => 10
  )
)

Ik probeer nu alleen de volgende output te krijgen:

code:
1
2
3
4
Array (
  [0] => Array (a, 1, c, 3, e, 5, g, 7, i, 9)
  [1] => Array(b, 2, d, 4, f, 6, h, 8, 10)
)

Daartoe dacht ik dat het volgende zou werken, maar ik krijg een error: "Warning: array_merge() [function.array-merge]: Argument #1 is not an array in D:\htdocs\test.php on line 12"
PHP:
1
2
3
4
5
6
$result = array();
$i = 0;
foreach($rows as $key => $value) {
  array_merge($result[$i % 2], array($key, $value)); // line 12
  $i++;
}

Ik snap die error niet, want drie regel naar boven definieer ik $result toch als een array (en daarmee $result\[2] bijvoorbeeld toch ook)?


[...]

Ik probeer echt, en hoop dat bovenstaande code - die nu wel werkt - dat bewijst :)
Als de bovenstaan de code werkt (zelf niet getest). Wat is dan nu je probleem nog, is nu alles opgelost en kun je vrolijk verder scripten, wat verwacht je nu :X

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8

Pagina: 1