私は私のmysqlデータベースを照会する短いスクリプトを作成しようとしており、結果(動的)の量に応じて各セグメントにスクリプトが必要です。配列内の項目の量に応じてPHPループ
たとえば、$arr
はmysql_fetch_array
の結果で、872個のアイテムがあります。機能を9回、100アイテムごとに1回、72アイテムの最後に1回実行します。
どうすればいいですか?たぶん
私は私のmysqlデータベースを照会する短いスクリプトを作成しようとしており、結果(動的)の量に応じて各セグメントにスクリプトが必要です。配列内の項目の量に応じてPHPループ
たとえば、$arr
はmysql_fetch_array
の結果で、872個のアイテムがあります。機能を9回、100アイテムごとに1回、72アイテムの最後に1回実行します。
どうすればいいですか?たぶん
for
のループを100ずつ増分するだけでかまいません。array_slice()
を使用すると、各ループの関連する行を取得できます。
$dbRows = resultsFromDB();
for($i = 0; $i < count($dbRows); $i+=100) {
$concernedRows = array_slice($dbRows, $i, 100);
mySuperFunction($concernedRows);
}
これは素晴らしい、ありがとう –
条件のためのcount()関数を配置すると、ループ通過するたびに項目を数えるので、実行が遅くなります。 –
@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万の要素を持つ配列は、空の配列と同じくらい長くかかります。 –
のようなもの:
$length = count($arr);
for ($i = 0; $i < ceil($length/100); $i++) {
}
私は理解している場合。
何らかの理由で、ループは108回(ループ終了後に$ i = 108)、 '' count($ arr)= 2700''だけ実行されます。 –
@Or W:* "only" *?あなたの仕様では、2700項目の配列は、108回ではなく、27回だけ関数を実行する必要があります。 –
@Or W、おそらくそれを実装したコードの残りの部分を表示してください。 '$ length = 2700;を実行してみてください。 echo ceil($ length/100); '。出力する必要があります '27' –
ループする各セグメントを最大100個のアイテムにしますか? – vascowhite
@vascowhite - yes –