См. Значение, только что заданное в массиве в цикле foreach

У нас есть цикл foreach, который является одной из наших консольных команд, он строит массив, который будет помещен в базу данных после обращения к Json.

Чтобы получить одно из конкретных значений, мы хотели бы ссылаться на два из ДРУГИХ значений, которые были вытащены в цикле

Ниже приведен цикл, значение «conversionRate» - это то, что мы пытаемся получить, из результата запросов «продаж» и «кавычек». Я понятия не имею, как называть их, пока еще внутри цикла.

 foreach ($users as $user) {
            $todaysCcActionsArray[] = [
                'name' => DB::Table('sw_users')->where('EmailAddress', $user)->value('FirstName'),

                'code' => $user,

                'sales' => Order::where('Status', 'BOOKING')
                ->whereNotIn('Product', ['commercial_insurance', 'home_insurance'])
                ->where('MasterOrderNumber', 0)
                ->whereNull('OriginalOrderNumber')
                ->where('CallCentreID', '!=', $user)
                ->whereDate('OrderDate', '=', date('Y-m-d'))->count(),

                'quotes' => Order::where('Status', 'QUOTE')
                ->whereNotIn('Product', ['commercial_insurance', 'home_insurance'])
                ->where('MasterOrderNumber', 0)
                ->whereNull('OriginalOrderNumber')
                ->where('CallCentreID', '!=', $user)
                ->whereDate('OrderDate', '=', date('Y-m-d'))->count(),

                'conversionRate' => 'sales' / 'quotes' * 100
            ];
        }

ОБНОВИТЬ

Вот как это получается, если печататься.

array:16 [ 
        0 => array:4 [ 
                "name" => "Melissa" 
                "code" => "mkingnew" 
                "sales" => 2 
                "quotes" => 1 
                ] 
        1 => array:4 [ 
                "name" => "Wendy" 
                "code" => "wjonesnew" 
                "sales" => 2 
                "quotes" => 1 
                ] 
        2 => array:4 [ 
                "name" => "Sarah" 
                "code" => "sdickersonnew" 
                "sales" => 2 
                "quotes" => 1 ] 

Всего 1 ответ


То, что вы эффективно делаете, - это попытка создать запись массива, используя значения от себя, пока вы ее создаете ... вы не можете этого сделать :)

То, что вы можете сделать, это построить запись в частях, а затем добавить ее в массив:

foreach ($users as $user) {
    $entry = array(
        'name' => DB::Table('sw_users')->where('EmailAddress', $user)->value('FirstName'),
        'code' => $user,
        'sales' => Order::where('Status', 'BOOKING')
            ->whereNotIn('Product', ['commercial_insurance', 'home_insurance'])
            ->where('MasterOrderNumber', 0)
            ->whereNull('OriginalOrderNumber')
            ->where('CallCentreID', '!=', $user)
            ->whereDate('OrderDate', '=', date('Y-m-d'))->count(),

        'quotes' => Order::where('Status', 'QUOTE')
            ->whereNotIn('Product', ['commercial_insurance', 'home_insurance'])
            ->where('MasterOrderNumber', 0)
            ->whereNull('OriginalOrderNumber')
            ->where('CallCentreID', '!=', $user)
            ->whereDate('OrderDate', '=', date('Y-m-d'))->count(),
    );
    $entry['conversionRate'] = $entry['sales'] / $entry['quotes'] * 100; 

    $todaysCcActionsArray[] = $entry;
}