【PHP】毎回$valuesで次の値を返したい

受付中 プログラミング
2024-12-24
小次郎又三郎
Laravelでエクスポートしようとしています。配列があり、2つの値を返します。として:
        items: array:2 [▼
            0 => "90"
            1 => "600"
          ]
        
これらの2つの値をExcelで表示したいのですが、常に90と表示されますが、どうすればよいですか?
        for ($i = 0; $i <count($this->values); $i++) {
            $values[$i]=$this->values[$i];
                
            return [
                    //$videohistory->user_id,
                    //emoji_decode($videohistory->publisher->nick_name),
                    date("Y-m-d H:i:s", $videohistory->create_time),
                    date("Y-m-d H:i:s", $videohistory->end_time),
                    diff_date_format($videohistory->begin_time, $videohistory->end_time, "%H sa %i dk. %s sn"),
                    $values[$i],
                ];    
        }
        
回答一覧
forループ内に戻っているため、最初の反復のみが表示されます。配列を作成し、ループの後に返す必要があります。
小次郎又三郎
このコードは関数に含まれていますか?
小次郎又三郎
はい
小次郎又三郎
だから私は別の配列を作成してそこに値を置く必要がありますか?
小次郎又三郎
このようなものは、配列にデータを収集し、ループが完了した後にのみデータを返す可能性があります。
        public function map($videohistory): array{
        
            $ret = [];
        
            for ($i = 0; $i <count($this->values); $i++) {
                $values[$i]=$this->values[$i];
                    
                $ret[] = 
                        [
                        //$videohistory->user_id,
                        //emoji_decode($videohistory->publisher->nick_name),
                        date("Y-m-d H:i:s", $videohistory->create_time),
                        date("Y-m-d H:i:s", $videohistory->end_time),
                        diff_date_format($videohistory->begin_time, $videohistory->end_time, "%H sa %i dk. %s sn"),
                        $values[$i],
                        ];    
            }
            return $ret;
        }
        
小次郎又三郎
それは理にかなっていますが、私はこれを試しました。これにより、両方の時間に同じ値が書き込まれます。よく日付->90日付2->600私が望む結果。しかし、このサイクルの日付->90の日付->600の日付2->90の日付2->600は結果を@RiggsFollyに与えます
小次郎又三郎
処理中のデータについてもう少し知っていれば役立つかもしれません
小次郎又三郎
何をしarray_map()ますか? array_map(callback, ...arrays) 関数は引数を繰り返し処理します(配列から値を取得します)。 たとえば、2つの配列を指定すると、次のようになります。 $myArr1 = ['hello' => 'world']; と $myArr2 = ['foo' => 'bar']; コールバック関数は2つの引数を受け入れます
        $myResult = array_map(function ($myArr1Value, $myArr2Value) { 
            return 'Any value here';
        }, $myArr1, $myArr2);
        
        // output:
        // ['Any value here', 'Any value here'];
        
配列値のみを反復処理します。
        $items = ["90", "600"];
        
        $myResult = array_map(function ($iterationValue) {
            return [
                //$videohistory->user_id,
                //emoji_decode($videohistory->publisher->nick_name),
                date("Y-m-d H:i:s", $videohistory->create_time),
                date("Y-m-d H:i:s", $videohistory->end_time),
                diff_date_format($videohistory->begin_time, $videohistory->end_time, "%H sa %i dk. %s sn"),
                $iterationValue
            ];
        }, $items);
        
$myResult次に、配列の配列が含まれます。
        print_r($myResult);
        //output:
        //[ ['date', 'date', "90"], ['date', 'date', "600"] ]; 
        
小次郎又三郎