2019-08-28に投稿

何も考えず手癖で書いたり、眠いなーって思いながら書いた、なんかパッとしないコードたち

はじめに

とりあえずググろう。特にPHPは関数が充実してるから、なにかしらある。
という自分への戒め。
beforeがパッとしないコードたち、それを改善したのがafter。

配列Aのi番目と配列Bのi番目を同時に操作したい

初心者の頃から時が止まっていた。
言語: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でなんかする
}

CSVをN件ずつバルクインサートorマルチプルインサートしたい

こんなクソダサい実装嫌だとか思ってたけど、クソ眠くて何も思い浮かばなかった。
言語: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でやろうとするとバルクなの? マルチプルなの?

取得したDOMをループで回したい

手癖とか眠いとか関係なく普通に知らなかった。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とかの方が多いと思うけど、たぶん一緒。

おわりに

何か思いつけばまた生き恥を晒すかもしれない

ツイッターでシェア
みんなに共有、忘れないようにメモ

hammhiko

恥を晒して生きていきます。

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント