LoginSignup
3
0

More than 1 year has passed since last update.

PHPでコードゴルフ

Last updated at Posted at 2022-10-10

はじめに

コードゴルフって面白いですね。
あれこれ考えていると普段見かけないソースが生まれたりして新鮮な気持ちになれました。
日頃PHPを書かない人もいると思いますので、敷居が下がればと思い使いそうなものをざっくりまとめておきます。
(比較に関することは例によって闇が深い書いていないため、公式ページを参照してください)

公式

すべてここに書いてあります
https://www.php.net/manual/ja/langref.php

変数宣言

// 変数名は必ず$をつけます。
$hoge = '1';

// 数字から始まる以下のような変数名は無効です。
$1 = '1';
$1_hoge = '11';

// 大文字小文字違いは別の変数として扱われます。
$hoge = 'あ';
$HOGE = 'い';
echo $hoge;// あ
echo $HOGE;// い

配列生成

// 以下は同じ配列が得られます。
$a = [1, 2, 3];
$a = array(1, 2, 3);

// 多次元配列の場合は変数化した方が短くなります。
$a = [[1, 2, 3], [4, 5, 6]];
$a = array(array(1, 2, 3), array(4, 5, 6));

// array()にListとMapの区別はないものと思ってもらって大丈夫です。
// 一部だけkeyを指定することもできます。
$a = array(
  1,
  'hoge' => 2,
  3
);

// 型の制約がないので以下のような配列も作れます。
$a = array(1, 'a', true, '1');
// これをimplode(to_sのような文字列表現)に渡すと以下のような結果になります。
echo implode($a); // 1a11

ループ処理

// 普通のfor
for ($i = 0; $i < 10; $i++) echo $i;

// 普通のwhile
// インクリメントの前置後置の扱いは一般的な他言語と同じです。
$i = 0;
while ($i < 10) echo $i++; 

// 拡張for
// インデックスが不要な場合、$i=>を削ります。
foreach (array('a', 'b', 'c') as $i => $n) echo $n;// abc

出力

// 文字列連結に.を使います。
$s = 'hoge'.'fuga';

// ダブルクォートで変数展開します。
echo 'hoge\nfuga';
// hoge\nfuga
echo "hoge\nfuga";
// hoge
// fuga

// 出力するだけならechoで足ります。引数で渡す必要がないため短くなります。
echo 'hoge';
echo('hoge');// 上と同じ

// printfでフォーマット出力になります。
// 第一引数がフォーマッタ、以降は可変長です。
$n = 1000;
$u = '円';
printf("%d%s", $n, $u);//1000円

さいごに

途中で確認する時は以下のコマンドを使いました。

// 半角スペースとLFを除去
sed -e 's/ //g' ファイル名.php | tr -d '\n'

バイト数が欲しい時はwc -c
文字数はwc -m
をつなぎます。

また、PHPタグ<?PHPは実行環境により<?に縮められることがあります。
開始タグを削れない場合でも行末の終了タグ?>は削れるかもしれません。
こういったことも詰めていくと、だんだんコードゴルフしてる感じになります。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0