2011-06-25 16 views
2

私は私のmysqlデータベースを照会する短いスクリプトを作成しようとしており、結果(動的)の量に応じて各セグメントにスクリプトが必要です。配列内の項目の量に応じてPHPループ

たとえば、$arrmysql_fetch_arrayの結果で、872個のアイテムがあります。機能を9回、100アイテムごとに1回、72アイテムの最後に1回実行します。

どうすればいいですか?たぶん

+0

ループする各セグメントを最大100個のアイテムにしますか? – vascowhite

+0

@vascowhite - yes –

答えて

3

forのループを100ずつ増分するだけでかまいません。array_slice()を使用すると、各ループの関連する行を取得できます。

$dbRows = resultsFromDB(); 

for($i = 0; $i < count($dbRows); $i+=100) { 
    $concernedRows = array_slice($dbRows, $i, 100); 

    mySuperFunction($concernedRows); 
} 
+0

これは素晴らしい、ありがとう –

+0

条件のためのcount()関数を配置すると、ループ通過するたびに項目を数えるので、実行が遅くなります。 –

+1

@OndřejMirtes:**そうではありません** count()はカウントする要素をループしません。単に 'zend_hash'のプロパティにアクセスします。私はあなたにPHPソースをブラウズしてもらうことを勧めます。特に '' zend_hash_num_elements() '](http://svn.php.net/repository/php/php-src/branches/PHP_5_3/Zend/zend_hash.c)と[' PHP_FUNCTION(count) '](http: //svn.php.net/repository/php/php-src/branches/PHP_5_3/ext/standard/array.c)。 PHP配列(Zend Hash)の項目数は、挿入/削除時に自動的に更新されます。 100万の要素を持つ配列は、空の配列と同じくらい長くかかります。 –

2

のようなもの:

$length = count($arr); 

for ($i = 0; $i < ceil($length/100); $i++) { 

} 

私は理解している場合。

+0

何らかの理由で、ループは108回(ループ終了後に$ i = 108)、 '' count($ arr)= 2700''だけ実行されます。 –

+0

@Or W:* "only" *?あなたの仕様では、2700項目の配列は、108回ではなく、27回だけ関数を実行する必要があります。 –

+0

@Or W、おそらくそれを実装したコードの残りの部分を表示してください。 '$ length = 2700;を実行してみてください。 echo ceil($ length/100); '。出力する必要があります '27' –

関連する問題