2011-03-22 13 views
28

że mam tablicęJak mogę wziąć tablicę, podzielić ją na dwie części i utworzyć dwie listy?

$array 

Czy ktoś może dać mi przykład, jak korzystać z pętli foreach i wydrukować dwie listy po początkowym całkowity Tablica została zliczane i podzielone przez dwa, z dowolnego reszta pozostawione w druga lista?

Więc zamiast używać foreach do stworzenia jednej długiej listy, będą tworzone dwie listy? jak tak ...

  1. Wartość 1
  2. Wartość 2
  3. Wartość 3

a następnie druga lista będzie kontynuować drukowanie w celu

  1. Wartość 4
  2. Wartość 5
  3. Wartość 6

Odpowiedz

64

Aby uzyskać część tablicy, można użyć array_slice:

$input = array("a", "b", "c", "d", "e"); 

$len = count($input); 

$firsthalf = array_slice($input, 0, $len/2); 
$secondhalf = array_slice($input, $len/2); 
+1

Dzięki za ten przykład wygląda na to, że większość się z Tobą zgadza! – Andy

+7

Oryginalny plakat chciał dodatkowego elementu w drugiej połowie, ale jeśli chcesz dodatkowy element w pierwszej połowie, użyj rundy ($ len/2) w obu miejscach, gdzie masz $ len/2. –

+0

@DustinGraham, co powiesz na temat 'podłogi() 'w pierwszej połowie i' ceil() 'w drugiej?Tablica z 5 elementami zostanie podzielona w następujący sposób: 2/3 – Fleuv

13

Użyj array_chunk, aby podzielić tablicę na wiele pod-macierzy, a następnie wykonaj pętlę nad każdym z nich.

Aby dowiedzieć się, jak duże powinny być porcje, aby podzielić tablicę na pół, należy użyć ceil(count($array)/2).

<?php 
$input_array = array('a', 'b', 'c', 'd', 'e', 'f'); 
$arrays = array_chunk($input_array, 3); 

foreach ($arrays as $array_num => $array) { 
    echo "Array $array_num:\n"; 
    foreach ($array as $item_num => $item) { 
    echo " Item $item_num: $item\n"; 
    } 
} 

Wyjście

Array 0: 
    Item 0: a 
    Item 1: b 
    Item 2: c 
Array 1: 
    Item 0: d 
    Item 1: e 
    Item 2: f 
+0

Dzięki za umieszczenie go w e.t.c foreach chociaż większość facetów sugeruje array_slice .. – Andy

+0

Powinno być ceil (count ($ array)/2), nie ciel. tylko mały pomocnik. –

2
$limit=count($array); 

$first_limit=$limit/2; 
for($i=0;$i<$first; $i++) 
{ 
    echo $array[$i]; 
} 
foreach ($i=$first; $i< $limit; $i++) 
{ 
    echo $array[$i]; 
} 
+0

Fajny przykład dzięki – Andy

1

za pomocą pętli foreach można to zrobić:

$myarray = array("a", "b", "c", "d", "e", "f", "g"); 
$array1 = array(); 
$array2 = array(); 
$i = 1; 

foreach ($myarray as $value) { 
    if ($i <= count($myarray)/2) { 
     $array1[] = $value; 
    } else { 
     $array2[] = $value; 
    } 
    $i++; 
} 

Ale jest jeszcze łatwiejszy w obsłudze array_splice

$myarray = array("a", "b", "c", "d", "e", "f", "g"); 
$array1 = array_splice($myarray, 0, floor(count($myarray)/2)); 
$array2 = $myarray; 
0

ten pracował dla mnie dokonał pierwszego tablicę zawsze trochę dłużej. Pomyślałem, że to może pomóc także ludziom.

$firsthalf = array_slice($input, 0, $len/2 +1); 
$secondhalf = array_slice($input, $len/2 +1); 
Powiązane problemy