配列で返して変数で受け取る事を分割代入というであってる.

2025.05.16

Logging

おはようございます.配列で返して変数で受け取る事を分割代入という…どんなコードか具体的に書いたのが下記です.

<?php

function getArray(): array {
  return [10, 20];
}

[$x, $y] = getArray();

echo "x: " . $x . "\n";
echo "y: " . $y . "\n";

// 要素数が合わない場合
function getMoreArray(): array {
  return [100, 200, 300];
}

[$p, $q] = getMoreArray(); // $q には 200 が代入され、300 は無視される
echo "p: " . $p . "\n";
echo "q: " . $q . "\n";

[$m, , $n] = getMoreArray(); // カンマで要素をスキップ
echo "m: " . $m . "\n";
echo "n: " . $n . "\n";

// 連想配列のようなキー指定も可能 (PHP 7.1以降)
function getAssocArray(): array {
  return ['name' => '太郎', 'age' => 30];
}

['name' => $userName, 'age' => $userAge] = getAssocArray();

echo "名前: " . $userName . "\n";
echo "年齢: " . $userAge . "\n";

?>

最初、凄くこれに違和感を覚えたのを覚えています.理由はカッコカッコで括ってあるから、なんだか配列を連想するのですよね.とても便利ですけどね、因みにPHP言語でも比較的に新しいバージョンだったら使用できます.

尚、PHPバージョン7.1以下だった場合はlistを使用すると同じようなことになります.

<?php

function getArray(): array {
  return [10, 20];
}

list($x, $y) = getArray();

echo "x: " . $x . "\n";
echo "y: " . $y . "\n";

// 要素数が合わない場合
function getMoreArray(): array {
  return [100, 200, 300];
}

list($p, $q) = getMoreArray(); // $q には 200 が代入され、300 は無視される
echo "p: " . $p . "\n";
echo "q: " . $q . "\n";

list($m, , $n) = getMoreArray(); // カンマで要素をスキップ
echo "m: " . $m . "\n";
echo "n: " . $n . "\n";

?>

それにしても分割代入って呼び名、直ぐに忘れそう・・・.

明日へ続く

著者名  @taoka_toshiaki

※この記事は著者が40代前半に書いたものです.

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

OFUSEで応援を送る

タグ

```, $代, カッコカッコ, カンマ, キー指定, コード, スキップ, バージョン以下, 分割代, 分割代入, 呼び名, 変数, 太郎, 新しいバージョン, 最初, 要素, 言語, 連想配列, 違和感, 配列,

頻繁にランダム番号が重複しないようにするクラス.

2024.05.24

Logging

おはようございます、頻繁にランダム番号が重複しないようにするクラスを作りましたのでお裾分けです.実際、Laravelで個人開発しているものに同じ様なコードを走らせています.因みに昨日、Qiitaに投稿したコードと同じものになります.このコードはどういう時に使用しているか.

自分の場合、ランダムにポストするのにこちらのコードを可変したコードを走らせています.

<?php
// 頻繁にランダム番号が重複しないようにするクラス.
class randomizeClass
{
    /**
     * ランダムに配列のインデックス番号を取得する
     */
    public function getRandomIndex($hasArray,$index,$filename='rand.dat',$max=15)
    {
        try {

            //過去のランダム番号を保存しているファイルが無ければ空ファイルを作成する
            if(!file_exists($filename)){                
                file_put_contents($filename,'');
            }

            //過去のランダム番号を保存しているデータを取得
            $fileData = file_get_contents($filename);

            //下記の場合は処理しない
            if ($fileData === false || count($hasArray) < $max) {
                return $index;
            }
            //ファイルデータをカンマで配列に分離
            $isArray = explode(',',$fileData);

            //過去のランダム番号に存在しないか?
            if (array_search($index,$isArray,false) === false) {
                //ランダム格納前処理
                array_unshift($isArray,$index);
                if (count($isArray)>$max) {
                    array_pop($isArray);
                }
                array_filter($isArray,function($val){
                    return $val !=='';
                });
                //ランダム番号を格納
                file_put_contents($filename,implode(',',$isArray));

                return $index;
            }
            //過去のランダム番号に合致したため再帰処理を行う.
            return $this->getRandomIndex($hasArray,array_rand($hasArray),$filename,$max);

        } catch (\Throwable $th) {
            throw $th;
            echo $th->getMessage();
        }
    }
}

//テスト用配列を生成
$hasArray = (function(){
    $val = [];
    for($i=0;$i<100;$i++){
        $val[] = $i;
    }
    return $val;
})();
$filename = 'rand.dat';
//ランダム番号::配列インデックスを取得し表示
print (new randomizeClass)->getRandomIndex($hasArray,array_rand($hasArray),$filename);
print PHP_EOL;
//過去のランダム番号を保存しているデータを取得し表示
print file_get_contents($filename);
print PHP_EOL;

ご自由にコピペでお使い頂ければと思っています😌.そんなに対したコードではないのでオープンにしています.今回は一応、日頃あまり書かないコメントを書きましたが書き慣れていないためか日本語が変かもですね...

明日へ続く.

著者名  @taoka_toshiaki

※この記事は著者が40代前半に書いたものです.

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

OFUSEで応援を送る

タグ

catch, count, echo, explode, false, filename, function, getMessage, getRandomIndex, gt, Laravel, lt, print, qiita, return, throw, Throwable, try, val, カンマ,