Private content!This content has been marked as private by the uploader.
概要 java言語で学ぶデザインパターン入門を買って学んだ内容を、PHPに書き直して整理していく予定です。 Iteratorとは Iteratorパターンは、数え上げの抽象化などと表現されます。 何が便利なのか、最初に普通に配列をforで回す例から、困る事を上げていって、Iteratorで解決してみます。 1. 配列をforで回す この本では、本棚を表すBookShlefというクラスに、本を表現するBookクラスを追加してく例が紹介されてますので、それにそってやってきます。 <?php class BookShelf { private $books = []; private $index = 0; /** * 本棚に本を追加 */ public function appendBook(Book $book) { $this->books[] = $book; } /** * 指定した本
下記のような構造のディレクトリとファイルに対して、RecursiveDirectoryIteratorで走査し、RecursiveIteratorIteratorで処理を行う場合 DIR ├──DIR-1 │ ├──DIR-1-1 │ │ ├──DIR-1-1-1 │ │ │ ├──FILE-1-1-1-1.php │ │ │ └──FILE-1-1-1-2.txt │ │ ├──FILE-1-1-1.php │ │ └──FILE-1-1-2.txt │ ├──DIR-1-2 │ │ ├──DIR-1-2-1 │ │ │ └──FILE-1-2-1-1.php │ │ └──FILE-1-2-1.txt │ ├──FILE-1-1.php │ └──FILE-1-2.txt ├──DIR-2 │ ├──DIR-2-1 │ │ ├──FILE-2-1-1.php │ │ └──FILE-2
<?php function getFileList($dir) { $files = scandir($dir); $files = array_filter($files, function ($file) { // 注(1) return !in_array($file, array('.', '..')); }); $list = array(); foreach ($files as $file) { $fullpath = rtrim($dir, '/') . '/' . $file; // 注(2) if (is_file($fullpath)) { $list[] = $fullpath; } if (is_dir($fullpath)) { $list = array_merge($list, getFileList($fullpath)); } } return $li
はじめに この記事は PHP カンファレンス 2014 における私 @yuya_takeyama の発表 Good Parts of PHP and The UNIX Philosophy のネタ出しも兼ねて書かれています。 当日の発表には、この記事に関する内容が出てくるかもしれませんし、出てこないかもしれません。 興味のある方は是非当日の発表の場にお越しいただければと思います。 (参加登録) なお、この記事は何回かに分けて書かれ、今回は関数型っぽい雰囲気が出るところまで達していません。 今回実装したコードは以下の GitHub リポジトリに含まれています。 (今後の記事のネタバレ含む) GitHub: yuya-takeyama/functional_programming_in_php イテレータとは何か イテレータとは値の連続です。 もっとざっくり言うと配列のような何かです。 ただし
by @dekokun on 2013/12/14 15:33 Tagged as: PHP. どうも、PHP Advent Calendar 2013の14日目の記事です。 昨日は@ockeghemのPHPとセキュリティの解説書12種類を読んでSQLエスケープの解説状況を調べてみたでしたね。 最近、仕事を一緒にし始めた後輩がPHPに慣れておらず、PHPのタイプヒンティングのことを知らなかったので(そして、さっき一緒にお酒を飲んだ別の後輩もタイプヒンティングを知らなかったので)、彼らに向けて、タイプヒンティングとはなにか、なぜタイプヒンティングを使うのかを解説する記事となります。 PHPのことをよく知っている皆様におかれましては特に得るものはないお話なのかなと思います。ご了承ください。なお、下記のような流れを経て、このブログの内容は当初の予定から変遷しました。 「returnとrequir
まえがき ファイル一覧をサブフォルダ内からもまとめて取得するサンプルメモ。 RecursiveIteratorIterator RecusiveDirectoryIterator を使えば自前で再帰処理作らないでいいから楽 サンプル ファイルのみ取得 <?php $serch_dir = dirname(__FILE__) .'/files'; $files = new RecursiveIteratorIterator( new RecursiveDirectoryIterator($serch_dir, FilesystemIterator::CURRENT_AS_FILEINFO | FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::SKIP_DOTS ) ); foreach($files as $file_path
鉄則: C言語レベルで再帰処理させろ! PHP言語レベルで再帰させるのとC言語レベルで再帰させるのでは、処理速度に雲泥の差がある。 圧倒的にC言語レベルの方が高速。 よく使う関数・クラス 以下の関数やクラスを使えば、配列の要素を辿っていく再帰処理であっても、 葉ノードだけを (PHP言語レベルでは) 単一のループ で処理させることが可能。 array_walk_recursive() http://php.net/manual/ja/function.array-walk-recursive.php 最速。 RecursiveIteratorIterator http://www.php.net/manual/ja/recursiveiteratoriterator.construct.php array_walk_recursive()より速度的には僅かに劣るが、こちらにしか出来ないこと
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く