2017-07-13 3 views
0

Ich versuche herauszufinden, wie man ein Array von Werten aus der Datenbank zerlegen/partitionieren und die einzelnen Listen in eine Reihe von Werten durch ein Komma getrennt.Split-Array in mehrere Teile und Ausgabe-String mit Werteliste

Wenn ich die Liste nicht von der Abfrage partitioniere, kann ich die ganze Liste in dem Format anzeigen lassen, das ich verwenden möchte.

<?php 

$get_values = mysqli_query($con, "SELECT * FROM table"); 

$value_list = array(); 
while ($row = mysqli_fetch_array($get_values)) 
{ 
$value_list[] = $row['value']; 
} 

foreach($value_list as $key => $value) 
print_r($value . ", "); 

//Outputs all values with comma as a list. 
//value0, value1, value2, ... value25 

?> 

In diesem Code Ich stelle dar, kann nicht heraus, wie die Listen „$ Werte“, um korrekt ausgegeben zu bekommen, wenn ich $ Werte [0] oder $ Werte [1] usw. in der Schleife foreach definieren, sondern dass offensichtlich gibt nur mir eine Liste. Wenn ich nur $ Werte in der foreach-Schleife verwende, bekomme ich einen Array zu String-Fehler. Die Daten sind dynamisch und ich verwende mehr Code, um Listengrößen für größere Mengen von Ergebnissen zu definieren und zu partitionieren, neben den 2 im Code gezeigten, die die Liste in 4 und 8 Teile aufteilen.

<?php 

$get_values = mysqli_query($con, "SELECT * FROM table"); 

$value_list = array(); 
$counter = 0; 
while ($row = mysqli_fetch_array($get_values)) 
{ 
$counter++; 
$value_list[] = $row['value']; 
} 

//Partition into 4 or 8 lists depending on amount of values returned 
if($counter >=0 && $counter <=100) 
{ 
$values = partition($value_list, 4); 
} 
if($counter >=100 && $counter <=200) 
{ 
$values = partition($value_list, 8); 
} 

foreach($values[0] as $key => $value) 
print_r($value . ", "); 

function partition(Array $list, $p) { 
$listlen = count($list); 
$partlen = floor($listlen/$p); 
$partrem = $listlen % $p; 
$partition = array(); 
$mark = 0; 
for($px = 0; $px < $p; $px ++) { 
    $incr = ($px < $partrem) ? $partlen + 1 : $partlen; 
    $partition[$px] = array_slice($list, $mark, $incr); 
    $mark += $incr; 
} 
return $partition; 
} 

?> 

Gibt es etwas, was ich tun kann um die Ausgabe zu erhalten, die ich von allen Listen will, so dass ich die Listen sie verwenden kann oder verarbeiten später in kleinen Chargen?

Was ich will ist die einzelnen Listen aus der Hauptpartitionierte Liste im gleichen Format wie die gesamte Liste aus dem ersten Skript ausgeben.
Beispiel:

list0: 
value0, value1, value2, ... value25 
list1: 
value0, value1, value2, ... value25 
list2: 
value0, value1, value2, ... value25 
list3: 
value0, value1, value2, ... value25 
list4: 
value0, value1, value2, ... value25 
list5: 
value0, value1, value2, ... value25 
list6: 
value0, value1, value2, ... value25 
list7: 
value0, value1, value2, ... value25 

Hier ist ein Beispiel dafür, was die Feldausgabe aussieht, nachdem die Partitionsfunktion mit etwa 200 Ergebnissen.

Array 
(
    [0] => Array 
     (
      [0] => value0 
      [1] => value1 
      [2] => value2 
      ... 
      ... 
      ... 
      [25] => value25 
     ) 

    [1] => Array 
     (
      [0] => value0 
      [1] => value1 
      [2] => value2 
      ... 
      ... 
      ... 
      [25] => value25 
     ) 

    [2] => Array 
     (
      [0] => value0 
      [1] => value1 
      [2] => value2 
      ... 
      ... 
      ... 
      [25] => value25 
     ) 

    ... 
    ... 
    ... 
    ... 

    [7] => Array 
     (
      [0] => value0 
      [1] => value1 
      [2] => value2 
      ... 
      ... 
      ... 
      [25] => value25 

     ) 

) 
+0

Diese Frage ist nicht sehr klar. Der letzte Dump zeigte, dass Sie ein Array von Arrays erhalten. Dies sollte es Ihnen leicht machen, sie zu durchlaufen und sie in Gruppen von (in diesem Fall) 25 auszugeben: 'foreach ($ Werte als $ i => $ a) {echo" Liste $ i: ". beitreten (',', $ a); } ''. Willst du das nicht? – kmoser

+0

Sieht aus wie es genau das tut, was ich wollte. Danke ich schätze das. – John

+0

Wenn du das als Antwort posten willst, werde ich es akzeptieren. – John

Antwort

0

Der letzte Dump zeigte, dass Sie ein Array von Arrays erhalten. Dies sollte Sie leicht durchlaufen lassen und sie in Gruppen von (in diesem Fall) 25 ausgeben: