あじちゃんの備忘録。

〜ここはメモ帳です

連想配列において特定のindexのみを抜き出して(加工したりして)配列にする処理

<?php

// 元になる配列
$data = array(
        array('id' => 1, 'name' => 'Bob', 'position' => 'Clerk'),
        array('id' => 2, 'name' => 'Alan', 'position' => 'Manager'),
        array('id' => 3, 'name' => 'James', 'position' => 'Director', 'hoge' => 'hogeeeeee')
);

// array_map()を使って、index=hogeを抽出/加工。  参考: https://www.php.net/manual/ja/function.array-map.php
$names = array_map(
        function($person) {
            // 'hoge'を持たないものは無視
            if (!empty($person['hoge'])){
                return ['NAME' => ">>>" . $person['hoge']];
            }
        },
        $data
);

print_r($names); // --- *1

// コールバック関数を使用して、空配列を除去する処理
$function = function($element) use ($names) {
    if (!empty($element)) {
        return $element;
    }
};

// array_filter()にコールバック関数として先の関数を指定する 参考: https://www.php.net/manual/ja/function.array-filter.php
// array_values()がindexを振り直してくれる 参考: https://www.php.net/manual/ja/function.array-values.php
$result = array_values(array_filter($names, $function));

print_r($result); // --- *2

*1 -- ただ抽出/加工したもの。空のコンテンツができてしまう。

Array
(
    [0] => 
    [1] => 
    [2] => Array
        (
            [NAME] => >>>hogeeeeee
        )

)

*2 -- indexが整い、目的のものが取り出される。indexの振り直しを行わなかった場合は[2] => Array....という感じになる

Array
(
    [0] => Array
        (
            [NAME] => >>>hogeeeeee
        )

)

dockerコンテナの中でviコマンドが使えないとき

こういうエラーが出た時の話

# vi /etc/my.cnf
bash: vi: command not found

私の環境では、rootユーザーのときこんな感じで apt-get が使えたのでそこからvimを入れることにしました。

# yum -v
bash: yum: command not found

# apt-get -v
apt 1.4.9 (amd64)

# apk -v
bash: apk: command not found

🌾 vim/vi の違いがわかんなかったのでこれを読んだ www.softel.co.jp

  • とりあえずアップデートをかける
# apt-get update
-略-
Fetched 7949 kB in 3s (2533 kB/s)                           
Reading package lists... Done
  • vim をインストール(途中で続けるか聞かれるので Y と答える)
# apt-get install vim
Reading package lists... Done
Building dependency tree       
Reading state information... Done
-略-
Do you want to continue? [Y/n] Y
-略-
update-alternatives: warning: skip creation of /usr/share/man/ja/man1/editor.1.gz because associated file /usr/share/man/ja/man1/vim.1.gz (of link group editor) doesn't exist
update-alternatives: warning: skip creation of /usr/share/man/man1/editor.1.gz because associated file /usr/share/man/man1/vim.1.gz (of link group editor) doesn't exist

こんな感じで完了

# vim hoge.txt
# vi hoge.txt

どちらでも使えるようになりました。

シングルコーテーションとダブルコーテーションの使い分けに気をつけること

シングルコーテーションは「文字列中の変数を変数値に置換する」
ダブルコーテーションは「文字列中の変数を変数値に置換しない」くらいにおもっていたけど、そういうわけでもなく。

以下のように改行コードなんかの変換も担っているようで、 echoした時とかに違いが出たりする。


なんでシングルコーテーションだとpreg_replaceで変換されないのかはちょっとわからない...

$シングルコーテーション = '北見の\r\nロマンを\nそのままパック!!';
$ダブルコーテーション = "北見の\r\nロマンを\nそのままパック!!";

$シングルコーテーション変換後 = preg_replace('/\\r\\n|\\r|\\n/m', '', $シングルコーテーション);
$ダブルコーテーション変換後 = preg_replace('/\\r\\n|\\r|\\n/m', '', $ダブルコーテーション);
> シングルコーテーション元のメッセージ
北見の\r\nロマンを\nそのままパック!!

> シングルコーテーション変換後のメッセージ
北見の\r\nロマンを\nそのままパック!!

> ダブルコーテーション元のメッセージ
北見の
ロマンを
そのままパック!!

> ダブルコーテーション変換後のメッセージ
北見のロマンをそのままパック!!

2019/07/23 19:00 追記

これでした
https://www.php.net/manual/ja/language.types.string.php

f:id:azix:20190723185613p:plain