Exemple #1
0
 /**
  * 指定された配列から要素を取得します。
  *
  * キーにドット区切りの文字列を与えると、多次元配列の任意の階層を指定できます。
  *
  * 例えば、第一引数に$array、第二引数に"deep.deep.index"を指定した時は、
  * $array["deep"]["deep"]["index"]を参照します。
  *
  * 指定された要素を取得できない場合は$defaultに指定された値を返します。
  *
  *        $value = Arr::get($array, "deep.deep.index"); // これは
  *        $value = $array["deep"]["deep"]["index"]; // これと同じことです。
  *
  *        // しかし $array["deep"]["deep"]["index"]が存在しなければ後者はエラーを発しますが
  *        // Arr::get()ではnullが返され、エラーは起きません。
  *
  * @param array $array 操作する配列
  * @param mixed|null $key 取得するインデックス
  * @param mixed|null $default 初期値。デフォルト値はnull
  * @return mixed
  */
 public static function get(array $array, $key = null, $default = null)
 {
     if ($key === null) {
         // keyがnullなら配列をそのまま返す
         return $array;
     }
     if (is_array($key)) {
         $ar = array();
         foreach ($key as $v) {
             Arr::set($ar, $v, Arr::get($array, $v, $default));
         }
         return $ar;
     }
     if (is_int($key)) {
         // key数値ならindexが存在するかチェックして適切な値を返す
         return isset($array[$key]) ? $array[$key] : $default;
     }
     $path = explode(".", $key);
     $index = array_pop($path);
     $pt =& $array;
     // 多次元配列を掘る
     foreach ($path as $k) {
         if (isset($pt[$k]) and is_array($pt[$k])) {
             $pt =& $pt[$k];
         } else {
             return $default;
         }
     }
     return isset($pt[$index]) ? $pt[$index] : $default;
 }
Exemple #2
0
 /**
  * @covers \CodeLapse\Arr::set
  */
 public function testSet()
 {
     $arr = array();
     $expected = 'value';
     Arr::set($arr, 'key', $expected);
     $this->assertEquals($arr['key'], $expected, 'setテスト');
     $expected = 'value';
     Arr::set($arr, 'key.deep', $expected);
     $this->assertTrue(isset($arr['key']['deep']), '多次元配列の値設定テスト');
     $this->assertEquals(Arr::get($arr, 'key.deep'), $expected, '多次元配列の値設定テスト');
 }
Exemple #3
0
 /**
  * $_FILES内から配列形式のファイル情報を取得します。
  * @param string    $name       複数のアップロードファイル情報を持つ$_FILESの要素のキー名
  * @return CodeLapse\Upload[]
  */
 public static function getArrayFiles($name)
 {
     $rawFileInfos = Arr::get($_FILES, $name);
     $errors = Arr::get($rawFileInfos, 'error');
     if (!is_array($errors)) {
         return [];
     }
     $files = [];
     foreach ($rawFileInfos as $attr => $values) {
         foreach ($values as $index => $value) {
             Arr::set($files, "{$index}.{$attr}", $value);
         }
     }
     $instances = [];
     foreach ($files as $f) {
         if (!self::validFile($f)) {
             continue;
         }
         $instances[] = new self($f);
     }
     return $instances;
 }