モノラルログ

マツオ ( @matsuoshi / monaural.net ) のざっくりしたブログです

PHP の array_column() という便利関数を今さら知った

PHP 5.5 から入ってた array_column という関数を知らなかった。便利やん。今月知った。

いうなれば、laravel collection や underscore.js の pluck に相当するやつ。PHP標準で入ってたんですね……

www.php.net

array_column の使い方

このような二次元の連想配列があったとき

<?php
$records = [
    [
        'id' => 2135,
        'first_name' => 'John',
        'last_name' => 'Doe',
    ],
    [
        'id' => 3245,
        'first_name' => 'Sally',
        'last_name' => 'Smith',
    ],
    [
        'id' => 5342,
        'first_name' => 'Jane',
        'last_name' => 'Jones',
    ],
    [
        'id' => 5623,
        'first_name' => 'Peter',
        'last_name' => 'Doe',
    ]
];

array_column() を使い、第2引数にほしいキーを渡すと、こんな感じ

渡したキーの値だけを抜き出し、配列として返してくれる

$first_names = array_column($records, 'first_name');
print_r($first_names);

Array
(
    [0] => John
    [1] => Sally
    [2] => Jane
    [3] => Peter
)

第3引数もある

第3引数にもキーを渡せまして、その場合、第3引数のフィールドをキーにした連想配列として返してくれる

$first_names = array_column($records, 'first_name', 'id');
print_r($first_names);

Array
(
    [2135] => John
    [3245] => Sally
    [5342] => Jane
    [5623] => Peter
)

これはよく使いそう。

別の使い方

第2引数を null にして第3引数を渡すと、第3引数をキーにした連想配列として、全体を返してくれる

$sorted = array_column($records, null, 'id');
print_r($sorted);

Array
(
    [2135] => Array
        (
            [id] => 2135
            [first_name] => John
            [last_name] => Doe
        )

    [3245] => Array
        (
            [id] => 3245
            [first_name] => Sally
            [last_name] => Smith
        )
    // 以下略

これもよく使うケースだな〜

オブジェクトにも使える

PHP公式マニュアルによると

オブジェクトの配列を指定した場合は、public プロパティはそのまま取得できます。 protected や private なプロパティを取得したい場合は、そのクラスがマジックメソッド get() および isset() を実装している必要があります。

とのことで、連想配列だけでなくオブジェクトにも使える。(PHP 7.0以降)

知らんかった

symfony とか使ってて pluck ないのかな〜 とか調べてたんだけど、なんてことはない PHP 標準にあったのであった。知らんかった。

関連

underscorejs.org

readouble.com

Karabiner で、英数キーを Cmd キーに置き換えてしまったが大丈夫

また Karabiner でのキーボード設定メモ。

cmd キーを押すつもりが、間違って英数を押しちゃった!

というのをなくしたい

ええい、いっそ英数キーを cmd キーにしてしまえ!

でもやっぱり英数キーも使うので、

  • 英数キー押しながら、なにかのキーを押す → cmd キー扱い
  • 英数キーを単体で押す → 英数キー扱い

にします。しました。これなら大丈夫。

Karabiner-Elements ならね。

ということで Karabiner用のコードはこちら

ところで、いつ英数キーを使ってるか?

という話ですが、私の場合は、

IMEをオンのまま、アルファベットを打ち始めてしまったとき」

ですね。

打ってる途中に「日本語オンのままにしてた!」と気づいても、英数キーを2回連打したらアルファベットに戻してくれます。英数キー役にたってる。

Karabiner を使って、マウスの右ボタン+トラックボール操作でスクロールする

急にトラックボール派になりました。

ということでトラックボール + Karabiner Elements を使って少しカスタマイズしたことのメモなどです。

カスタマイズ内容まとめ

  • 右ボタンをホイールクリックにする
  • 左右ボタン同時押しで右クリック
  • 右ボタン押しながらトラックボールを動かすと、スクロールする

といった感じになります。

右手がつらかった……

いままでは普通にマウスを使ってたんです。けど、いやもう、去年からずっと右肩〜腕〜手首〜親指あたりがしんどすぎて。痛みがひかない状態が長く続いておりまして。藁にもすがる思いで、デバイス変えてみたら負担のかかり具合も変わってくるかな?? と思ってトラックボールにトライしてみた次第です。

購入したのはこちら、ケンジントンOrbital Trackball with Scroll Ring (3000円台後半くらい)

結果、いまのところ快調。手放せない感じになっています。

トラックボールとしては他にロジクールの M575S とか、エレコムの HUGE とかも試してみたんですが、どれもメリット・デメリットある感じでしたね。決め手は右親指の負担低減のとこでした。(モノによっては、ボタンやホイール操作が親指に集中しがちな機種もあって……)

Orbital Trackball

Kensington といえばトラックボール界の老舗ですよね。モデルはいろいろありますが、低価格な "Orbital Trackball with Scroll Ring" をひとまずトライしてみた感じ。

結果、形状的に手にしっくりなじむ。持ちやすいし、左右のボタンが大きくて、押しやすい。ほんとに親指を上から下に動かすだけで、あまり関節を曲げずにクリックできる。手の負荷はかなり下がったように思います。

リストレストをつけるとサイズ感はそこそこデカいけど、トラックボールはマウスと違って移動させないので、設置面積的にはむしろスペースをとらなくなりました。マウスパッドいらんもんな。

気がかりな点としてはボタンが2個しかないんですよね。あとスクロールリングが独特で、ちょっと慣れがいりそうかも。便利っちゃ便利なんだけど。

てことで、ちょっと Karabiner Elements を使って操作をカスタマイズしてみました。

www.kensington.com

Karabiner Elements でカスタマイズ

カスタマイズ方針はこんな感じ。

  • 2ボタンしかないので、せめて3ボタン相当の機能をもたせよう
  • ホイールクリック(ミドルクリック) は多用する。いっそ右ボタンをホイールクリックにしてしまえ
  • 右クリックも無くすわけにはいかないので、左右のボタン同時押しで右クリック扱いにしよう
  • 右ボタン押しながらホイールを動かしたら、スクロールできるようにしよう

コードは記事の末尾に貼っつけときます、gist だとこちらです。

https://gist.github.com/matsuoshi/3098a0a922134edcd77edffd86d77afe

他に試してみたトラックボール

比較したときの感想メモ。

Logicool M575S

売れ筋機種。

これは完全に好みだろうけど、ボールを右親指で動かすのに慣れなかった。(そもそも親指が痛いからトラックボール試してたので、親指以外でボールを扱う機種がよかった感じ)

ボタンやホイールの位置は一般的なマウスと同じなので、マウスからトラックボールに乗り換えるならこの形状が一番違和感少ないようには思う。

Elecom の HUGE (M-HT1DRXBK)

8ボタンと多機能。また、ボール自体がでかいので、カーソル操作はとてもやりやすい。ボールのサイズで操作感って大きく変わるってくるんだなあ。

ただ、親指側にボタンとホイールが集中しているので、親指が痛い自分には向かなかった。あと、Mac用のドライバで、自分のやりたいことができず(ホイールクリックがうまく効いてくれない……) ってのもちょっとマイナスポイントでした。

価格も安いし安定感はあったなー

コード

Karabiner Elements でのコード。

PhpStorm内のターミナルを WSL にしたい (for Windows)

Windows の PhpStorm でターミナルを開くと、標準のコマンドプロンプト (cmd.exe) が立ち上がる。

ふだんあまりコマンドプロンプトは出番がないので、WSL の ubuntu を起動させるようにしたく、その設定メモ

Setting → Tools → Terminal → Shell path のところを

C:\Windows\System32\wsl.exe

にするとOK

ちなみに、ターミナルを開くショートカットは Ctrl + F12 で

2021年のおみくじも凶でした。16年で8回 凶を引く男です。

あけましておめでとうございます。

おみくじ。下下。いわゆる凶。

過去ログから数えたら、この16年で8回、凶相当を引いています。よく生きてるな自分。

栄光の記録

year result emoji
2021 下下 😇
2020 上々大吉️ 🎯🎯🎯🎯🎯
2019 中上 -
2018 下下 😇
2017 下下 😇
2016 上々吉️ 🎯🎯🎯
2015 下下 😇
2014 下下 😇
2013 上々吉️ 🎯🎯🎯
2012 中中 -
2011 下下 😇
2010 下下 😇
2009 大吉️ 🎯🎯🎯
2008 大吉 🎯🎯🎯
2007 大吉 🎯🎯🎯
2006 😇

去年は「上々大吉」だったんだけどな〜〜〜

matsuoshi.hatenablog.com

死なないように、死なない程度に、がんばります…!