Modulus di dalam lingkaran

Saya memiliki array yang saya ulangi dan dipecah menjadi 50 bagian. Namun kadang-kadang jumlah item di dalam array itu lebih dari yang muat di dalam 50 bagian itu, misalnya:

$array = array(); // has 220 rows

for ($i = 0; $i < count($array); $i++) { 
    $j[] = $i;

    if ($i % 50 == 1) {
        print_r($j); // do something here with the 50 rows
        $j = null;
    }
}

Masalahnya di sini adalah ini tidak akan mencetak apa pun setelah 201. Saya tahu ada beberapa matematika aljabar yang terlibat dalam penyelesaian ini, tetapi saya masih bingung. Saat-saat seperti inilah saya benar-benar berharap saya memperhatikan kelas matematika di sekolah menengah.


person Meisam Mulla    schedule 02.07.2013    source sumber
comment
Apa output keinginan Anda atau array yang dihasilkan?   -  person Rikesh    schedule 02.07.2013
comment
Saya kira karena berhenti saat hitungan 50. Jadi setelah 200 tidak bisa mencapai 50 baris lagi, jadi berhenti di 201.   -  person Matheno    schedule 02.07.2013
comment
jangan pernah menghitung, di dalam for() Anda menjalankan fungsi n kali, bukan sekali   -  person    schedule 02.07.2013
comment
Pada dasarnya saya ingin melakukan permintaan batch ke Facebook Graph API dan hanya membutuhkan maksimal 50 permintaan dalam satu waktu.   -  person Meisam Mulla    schedule 02.07.2013


Jawaban (5)


Saya pikir array_chunk sesuai dengan kebutuhan Anda dan tidak perlu perhitungan matematika.

$result_array = array_chunk($array, 50, true);
person Rikesh    schedule 02.07.2013

Tambahkan kondisi tambahan

if ($i % 50 == 1 || count($array)-1 == $i)
person sectus    schedule 02.07.2013
comment
Bagaimana cara kerjanya? Menurut logika saya count($j) hanya akan mencapai maksimum 50. - person Meisam Mulla; 02.07.2013
comment
Kamu benar-benar bercanda. Bagaimana saya tidak memikirkan hal ini! - person Meisam Mulla; 02.07.2013
comment
tetapi Anda harus menggunakan jawaban @Rikesh. - person sectus; 02.07.2013
comment
@MeisamMulla, senang Anda memutuskan untuk menggunakan praktik terbaik - person sectus; 04.07.2013

Anda hanya perlu mendeklarasikan ulang array, menurut tebakan saya:

$array = array(); // has 220 rows

for ($i = 0; $i < count($array); $i++) { 
    $j[] = $i;

    if ($i % 50 == 1) {
        print_r($j); // do something here with the 50 rows
        $j = array() ;
    }
}

Setelah Anda melakukan $j = null tidak mungkin Anda dapat melakukan $j[] = $i

person vikingmaster    schedule 02.07.2013
comment
Ini bukan masalahnya. Saya mendapatkan array lain seperti yang diharapkan saat menggunakan $j = null. - person Meisam Mulla; 02.07.2013

$array = array(); // has 220 rows

for ($i = 0; $i < count($array); $i++) {
    $j[] = $i;

    if ($i % 50 == 1) {
        doSomething($j); // do something here with the 50 rows
        $j = array(); // reset the array
    }
}
doSomething($j); // with the last 20 entries

Setelah loop Anda selesai, Anda akan memiliki sisa 201 hingga 220 entri di $j, jadi lakukan saja tugas Anda lagi.

person Vlad Preda    schedule 02.07.2013

array_chunk mungkin berguna. Pada dasarnya membagi array menjadi beberapa bagian yang mengembalikan array multi dimensi

person David Jones    schedule 02.07.2013