[php] array_slice

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Rusky
  • Registratie: December 2000
  • Laatst online: 16-09 11:14
ik wil dat mijn array opgedeelt word in telkens 10 waarden (of 20 ofzo)
als eerst vul ik mijn array met gegevens uit mijn database, en daarna
geef ik met array_slice aan dat die opgedeelt moet worden. Maar hij deelt de rij op en niet
de array

bv. ik heb 10 waarden per rij en 1200 rijen.

als ik dan deze doe:

PHP:
1
2
3
4
5
$result = array();
while ($array = odbc_fetch_array($exc)) {
    $array = array_slice($array, 0, 2);
    echo $array["ID"] . "&nbsp;" . $array["ONDERWERP"] . "<BR>";
    }


dan geeft hij de eerste 2 waarden uit de rij weer en alle rijen (1200)
en dit wil ik niet. Ik wil net andersom, dus alle waarden uit een rij en maar 10'
rijen (zou deze moeten zijn):
PHP:
1
array_slice($array, 0, 10)

mijn pc


Acties:
  • 0 Henk 'm!

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

odbc_fetch_array -- Fetch a result row as an associative array
je array bevat elke keer maar 1 rij, die je via odbc_fetch_array opvraagt ;)

Je kan beter in je query een LIMIT gebruiken

[ Voor 25% gewijzigd door TheRookie op 23-05-2006 10:01 . Reden: +quote ]


Acties:
  • 0 Henk 'm!

  • Rusky
  • Registratie: December 2000
  • Laatst online: 16-09 11:14
odbc kent geen limit.... daarom probeerde ik deze oplossing

mijn pc


Acties:
  • 0 Henk 'm!

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

Wat je dan zou kunnen doen is in de while lus een tellertje bijhouden en uit de lus springen als je de eerste 10 (of 20) gehad hebt; dit is ook aan te passen als je bijvoorbeeld de rijen 10 - 20 wil hebben ...

Acties:
  • 0 Henk 'm!

  • Rusky
  • Registratie: December 2000
  • Laatst online: 16-09 11:14
TheRookie schreef op dinsdag 23 mei 2006 @ 10:29:
Wat je dan zou kunnen doen is in de while lus een tellertje bijhouden en uit de lus springen als je de eerste 10 (of 20) gehad hebt; dit is ook aan te passen als je bijvoorbeeld de rijen 10 - 20 wil hebben ...
PHP:
1
2
3
4
5
6
7
8
$i = 0;
$result = array();
while ($array = odbc_fetch_array($exc)) {
    $i++;
        if ($i > 0 && $i <= 20){
            echo $i . "&nbsp;" . $array["ONDERWERP"] . "<BR>";
        }
    }


geeft wel wat ik wil ja :)
bedankt

mijn pc


Acties:
  • 0 Henk 'm!

  • maartenba
  • Registratie: November 2001
  • Laatst online: 29-07-2024
Welke database heb je er onder hangen? Misschien kan je "LIMIT" wel faken met een row number < X of zo...

Acties:
  • 0 Henk 'm!

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Wil je dit gebruiken voor paging of gewoon de top van je tabel ophalen. Geef even aan welke database je eraan hebt hangen. Wellicht dat je het meteen in je query kan afvangen :)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Acties:
  • 0 Henk 'm!

  • Rusky
  • Registratie: December 2000
  • Laatst online: 16-09 11:14
ik heb een acces 2000 database die ik benader d.m.v. odbc

vb query
PHP:
1
2
3
$con = odbc_connect('MSAccessDriver','','');
$sql =  "(SELECT * FROM onderhoek WHERE $where_query LIKE '%$searchquery%')"; 
$exc = odbc_exec($con,$sql);


en het gehele script voor paging:
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
48
49
50
51
$con = odbc_connect('MSAccessDriver','','');
$sql =  "(SELECT * FROM onderhoek WHERE $where_query LIKE '%$searchquery%')"; 
$exc = odbc_exec($con,$sql);

$end = $start + $offset;

$i = 0;
$result = array();
while ($array = odbc_fetch_array($exc)) {
    $i++;
        if ($i > $start && $i <= $end){
            $id = $array["ID"];
            echo "<A HREF=\"detail.php?id=$id\">" . $array["ONDERWERP"] . "&nbsp;" . $array["PROJECTNAAM"] . "</A> <BR>";
            echo "Adres: " . $array["PROJECTADRES"] . $array["POST_PLAATS"] . "<BR>";
            echo "Opdrachtgever: " . $array["OPDRACHTGEVER"] . $array["ADRES_OPDR"] . $array["POST_PLAATS_OPDR"] . "<BR>";
            echo $array["PATHNAAM"] . "<BR><BR>";
        }
    }

$pages = ceil($i / $offset);
$current = $start / $offset + 1;
$next = $start + $offset;
$prev = $start - $offset;
$firstpage = $current - 5;
$lastpage = $current + 4;

echo "<CENTER>";

if ($current > 1) {
    echo "<A HREF=zoek.php?searchquery=$searchquery&where=$where&start=$prev&offset=$offset> << </A>";
} 

$x = 0;
while ($x < $pages) {
    $x++;
    $page = $x * $offset - $offset;

    if ($x > $firstpage && $x <= $lastpage){
        echo "<A HREF=zoek.php?searchquery=$searchquery&where=$where&start=$page&offset=$offset> "; 
    if ($x == $current) { 
        echo "[" . $x . "] </A>";
    } else {
        echo $x . " </A>";
        }
    }
}


if ($current != $pages) {
    echo "<A HREF=zoek.php?searchquery=$searchquery&where=$where&start=$next&offset=$offset> >> </A>";
}

[ Voor 140% gewijzigd door Rusky op 24-05-2006 10:11 ]

mijn pc


Acties:
  • 0 Henk 'm!

  • maartenba
  • Registratie: November 2001
  • Laatst online: 29-07-2024
Ik dacht dat in MS Access het row number in een query beschikbaar is onder de noemer "ID". (effe controleren, ben niet helemaal zeker van de knowledge base in mijn kop)

Je zou je query dan zo kunnen doen:
PHP:
1
2
3
4
5
$end = $start + $offset; // Verplaatst

$con = odbc_connect('MSAccessDriver','','');
$sql =  "(SELECT * FROM onderhoek WHERE $where_query LIKE '%$searchquery% AND ID BETWEEN $start AND $end')"; 
$exc = odbc_exec($con,$sql);


Veel databasevriendelijker omdat je enkel de records inleest die je gaat tonen.

[ Voor 25% gewijzigd door maartenba op 24-05-2006 11:20 ]


Acties:
  • 0 Henk 'm!

  • Rusky
  • Registratie: December 2000
  • Laatst online: 16-09 11:14
maartenba schreef op woensdag 24 mei 2006 @ 11:19:
Ik dacht dat in MS Access het row number in een query beschikbaar is onder de noemer "ID". (effe controleren, ben niet helemaal zeker van de knowledge base in mijn kop)
ok maar als er dan lege id's in staan (of regels die weg zijn), dan komen er hele rare outputs van.
of begrijp ik dat verkeerd?

v.b. database is

ID
0
2
4
7
8
9
10
12
15

als je dan between 0 en 10 doet krijg je : 0 2 4 7 8 9 10 = 7 resultaten en geen 10

mijn pc


Acties:
  • 0 Henk 'm!

  • maartenba
  • Registratie: November 2001
  • Laatst online: 29-07-2024
Die ID is in principe een door Access on-the-fly gegenereerde kolom, die gewoon het rijnummer in je query bijhoudt. Deze loopt altijd netjes omhoog. Nu, ik check effe of die kolom inderdaad ID noemt want daar ben ik niet 100% zeker van.

In MS Access blijkt dit niet te bestaan, volgens de diverse fora die ik bekeken heb. Hou je code dus maar gewoon :)

[ Voor 22% gewijzigd door maartenba op 24-05-2006 11:55 ]

Pagina: 1