PHPにおいてファイルの入出力

帰宅してPC起動したら自動起動にしてたSkypeのファイルがエラー吐いて勝手にPCが再起動→Skypeエラー→再起動の無限ループ入ってめちゃくちゃ焦ったけどSkypeアンインストールしてなんとかなった...
whileループでファイルを一行づつ読みながら処理をするときに中にsshで別のサーバーにアクセスするような処理があるとどうもループが回らななくなってしまうようだ. こまった
L4D2、ゲームファイルの整合性を確認したら120MBほど何故かファイルがなくなっていてサウンドループするのが直ってしまった。萎えぽよだったので、また全ステージ遊べるようになったのでめでたい
前半終了 ファイル1点目。少しゾットGKが出ていたか、21柳澤がゴール斜め左からループシュートで決める。 ファイル2点目。18三木が中央から斜め右にドリブルして低めのシュート、DFがブラインドになったか決まる。 ファイル3点目。24西川のシザーズからの左足シュートが炸裂。
#ゼビオ関東フットサル1部 第10節 ゾット×ファイル 前残18:56 ファイル得点! 中央7田辺からのループパスを受けた21柳澤が落ち着いてループシュートを流し込む! ゾット 0-1 ファイル
ReCycle!でブレイクビーツ化されたドラムループはREX2形式のファイルになります。ワンショット単位でMIDIノートがアサインされるため、サンプラーにREX2を読み込んでMIDIで演奏することで、自由に順番を組み替えて演奏することができます。 #DTM #DTMテクニック
ファイル中の特定の行を読み込むにはlinecacheモジュールのgetline( )メソッドを使う。例)l=linecache.getline("batting02to11.csv", 5) #ファイルの5行目を読み込む。なお、ループなどとは異なり最初は0ではなく1から始まる。

問題

用意された配列の値のうち、1つにプラス1して、すべての値と乗算した場合
どの値にプラス1するのがもっとも大きい結果になるか

0)
numbers = {1, 2, 3}
Returns : 12

1)
numbers = {1, 3, 2, 1, 1, 3}
Returns : 36
※数字は必ずしもユニークではない

2)
numbers = {1000, 999, 998, 997, 996, 995}
Returns : 986074810223904000

答えは非常に大きい数字になりますが、2の62乗を超えません

3)
numbers = {1, 1, 1, 1}
Returns : 36

自分なりの回答

<?
$numbers = array(1,1,1,1);
$target1 = 0;
for ($y = 0; $y < count($numbers); $y++){
  $target2 = 1;
  $numbers[$y] = $numbers[$y] + 1;
  for ($i = 0; $i < count($numbers); $i++) {
      $target2  = $target2 * $numbers[$i];
  }
  $numbers[$y] = $numbers[$y] - 1;
  if($target1 < $target2){
      $target1 = $target2;
  }
}
echo $target1;
?>

これだと2重にループするので配列に1000個値が入ってきたときにとんでもない数ループする
そしてメソッド化していないため、テストするさいに、配列の中身を書き換える必要があるため
ソースを書き換えることになってよろしくない

他の方の回答


<?php
function check($arr) {
    asort($arr);
    $arr[0] += 1;
    return array_reduce($arr, function ($carry, $item)
    {
        $carry *= $item;
        return $carry;
    }, 1);
}

var_dump(check(array(1,2,3)));
?>

私の回答と違い、メソッド化してあるのでテストのさいにもコードを書き換えずテスト化
array_reduceを使用することによって、ループの数を私の回答から比べて半分に減らしている。

まとめ

短いですがまとめると
私の回答はゴリ押しで誰でも思いつくような回答ですが、phpにはarray_reduceやarray_filter等便利な配列用の関数がいろいろあるので
どういう関数があるのか見ておいたほうが、私のような恥ずかしいコードを書かなくて済みますな。

[紹介元] PHPタグが付けられた新着投稿 – Qiita PHPにおいてファイルの入出力

  • コメント

    1. 匿名希望
      2017/08/17(木) 22:59:50

      帰宅してPC起動したら自動起動にしてたSkypeのファイルがエラー吐いて勝手にPCが再起動→Skypeエラー→再起動の無限ループ入ってめちゃくちゃ焦ったけどSkypeアンインストールしてなんとかなった…

    2. 匿名希望
      2017/08/19(土) 20:07:57

      whileループでファイルを一行づつ読みながら処理をするときに中にsshで別のサーバーにアクセスするような処理があるとどうもループが回らななくなってしまうようだ. こまった

    3. 匿名希望
      2017/08/19(土) 20:07:57

      L4D2、ゲームファイルの整合性を確認したら120MBほど何故かファイルがなくなっていてサウンドループするのが直ってしまった。萎えぽよだったので、また全ステージ遊べるようになったのでめでたい

    4. 匿名希望
      2017/08/19(土) 20:07:57

      前半終了
      ファイル1点目。少しゾットGKが出ていたか、21柳澤がゴール斜め左からループシュートで決める。
      ファイル2点目。18三木が中央から斜め右にドリブルして低めのシュート、DFがブラインドになったか決まる。
      ファイル3点目。24西川のシザーズからの左足シュートが炸裂。

    5. 匿名希望
      2017/08/19(土) 20:07:57

      #ゼビオ関東フットサル1部
      第10節 ゾット×ファイル
      前残18:56 ファイル得点!
      中央7田辺からのループパスを受けた21柳澤が落ち着いてループシュートを流し込む!
      ゾット 0-1 ファイル

    記事に戻る

関連記事