とりあえずググろう。特にPHPは関数が充実してるから、なにかしらある。
という自分への戒め。
beforeがパッとしないコードたち、それを改善したのがafter。
初心者の頃から時が止まっていた。
言語:PHP
参考:【PHP】複数の配列を同時に while で回す
before
$arrayA = ['a', 'b', 'c'];
$arrayB = ['1', '2', '3'];
$count = count($arrayA);
for ($i = 0; $i < $count; ++$i) {
$a = $arrayA[$i];
$b = $arrayB[$i];
hoge($a, $b); // aとbでなんかする
}
after
$arrayA = ['a', 'b', 'c'];
$arrayB = ['1', '2', '3'];
foreach (array_map(null, $arrayA, $arrayB) as [$a, $b]) {
hoge($a, $b); // aとbでなんかする
}
こんなクソダサい実装嫌だとか思ってたけど、クソ眠くて何も思い浮かばなかった。
言語:PHP
参考:array_chunk
before
$csv = hoge(); // SplFileObjectとかでCSVファイルを配列に
$records = [];
$arrayByInsertUnit = [];
foreach ($csv as $row) {
// 空行の処理は本題と逸れるので省略
$records[] = ['cd' => $row[0], 'name' => $row[1]];
if (count($records) === 1000) {
$arrayByInsertUnit[] = $records;
$records = [];
}
}
// 余り
$arrayByInsertUnit[] = $records;
foreach ($arrayByInsertUnit as $unit) {
//トランザクションとかは割愛
Model::insert($unit); // LaravelとかのORMとかでインサート
}
after
$csv = hoge(); // SplFileObjectとかでCSVファイルを配列に
$records = [];
foreach ($csv as $row) {
// 空行の処理は本題と逸れるので省略
$records[] = ['cd' => $row[0], 'name' => $row[1]];
}
$arrayByInsertUnit = array_chunk($records, 1000);
foreach ($arrayByInsertUnit as $unit) {
//トランザクションとかは割愛
Model::insert($unit); // LaravelとかのORMとかでインサート
}
あれ、でも、これ、綺麗にはなったけど、一度配列に全部入れてから分割してるから、beforeより遅い??
それと、insertのところ、laravelでやろうとするとバルクなの? マルチプルなの?
手癖とか眠いとか関係なく普通に知らなかった。JavaScript難しい
言語:JavaScript
参考:Crieit プログラミングチャレンジ
before
最初、普通にforEachしようとしたらエラーになったので、仕方なくforにしてた。
const li = document.getElementsByTagName("li");
const count = li.length;
for (let i = 0; i < count; i++) {
const val = li[i].value;
hoge(val); // なんかする
}
after
Array.from(document.getElementsByTagName("li")).forEach(li => {
const val = li.value;
hoge(val); // なんかする
});
forEachよりmapとかfilterとかの方が多いと思うけど、たぶん一緒。
何か思いつけばまた生き恥を晒すかもしれない
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント