初始化时如何获取同一数组中元素的值

时间:2017-03-02 10:37:49

标签: php arrays laravel

我认为这是一个奇怪的问题:

我不需要回答循环或推送到数组我只是想知道这个想法

我正在尝试初始化一个数组,但我需要读取前面这样的元素,

return $recourd_list = array(
                'clients'=> array(
                    'route' =>   'clients.index',
                    'title' =>   'fullname',
                    'list'  =>   Clients::orderBy('id', 'desc')->take(5)->get(),
                    'count' =>   Clients::count(),
                    'class' =>   'bgm-lightgreen',
                    'diff'  =>   5 - $recourd_list['clients']['count'],
                    ),

                'sliders'=> array(
                    'route' =>   'sliders',
                    'title' =>   'title',
                    'list'  =>   Sliders::orderBy('id', 'desc')->take(5)->get(),
                    'count' =>   Sliders::count(),
                    'class' =>   'bgm-rightBlue Oil-color',
                    'diff'  =>   5 - $recourd_list['sliders']['count'],
                ),
                'sponsors'=> array(
                    'route' =>   'sponsors.index',
                    'title' =>   'title',
                    'list'  =>   Sponsors::orderBy('id', 'desc')->take(5)->get(),
                    'count' =>   Sponsors::count(),
                    'class' =>   'bgm-nave dark-green',
                    'diff'  =>   5 - $recourd_list['sponsors']['count'],
                    ),
                'packages'=> array(
                    'route' =>   'packages',
                    'title' =>   'title',
                    'list'  =>   Packages::orderBy('id', 'desc')->take(5)->get(),
                    'count' =>   Packages::count(),
                    'class' =>   'bgm-bluegray',
                    'diff'  =>   5 - $recourd_list['packages']['count'],
                    ),
                'event_schedule'=> array(
                    'route' =>   'event_schedule.index',
                    'title' =>   'title',
                    'list'  =>   EventSchedule::orderBy('id', 'desc')->take(5)->get(),
                    'count' =>   EventSchedule::count(),
                    'class' =>   'bgm-orange',
                    'diff'  =>   5 - $recourd_list['event_schedule']['count'],
                    ),
        );

我需要读取diff元素中的count元素..这是初始化数组

时的方法

全部谢谢

2 个答案:

答案 0 :(得分:0)

简短回答:

但是,由于您在初始时定义了Count,为什么不这样做:

'diff' => 5 - Clients::count(),

所以整个例子:

return $recourd_list = array(
    'clients' => array(
        'route' => 'clients.index',
        'title' => 'fullname',
        'list' => Clients::orderBy('id', 'desc')->take(5)->get(),
        'count' => Clients::count(),
        'class' => 'bgm-lightgreen',
        'diff' => 5 - Clients::count(),
    ),

    'sliders' => array(
        'route' => 'sliders',
        'title' => 'title',
        'list' => Sliders::orderBy('id', 'desc')->take(5)->get(),
        'count' => Sliders::count(),
        'class' => 'bgm-rightBlue Oil-color',
        'diff' => 5 - Sliders::count(),
    ),
    'sponsors' => array(
        'route' => 'sponsors.index',
        'title' => 'title',
        'list' => Sponsors::orderBy('id', 'desc')->take(5)->get(),
        'count' => Sponsors::count(),
        'class' => 'bgm-nave dark-green',
        'diff' => 5 - Sponsors::count(),
    ),
    'packages' => array(
        'route' => 'packages',
        'title' => 'title',
        'list' => Packages::orderBy('id', 'desc')->take(5)->get(),
        'count' => Packages::count(),
        'class' => 'bgm-bluegray',
        'diff' => 5 - Packages::count(),
    ),
    'event_schedule' => array(
        'route' => 'event_schedule.index',
        'title' => 'title',
        'list' => EventSchedule::orderBy('id', 'desc')->take(5)->get(),
        'count' => EventSchedule::count(),
        'class' => 'bgm-orange',
        'diff' => 5 - EventSchedule::count(),
    ),
);

答案 1 :(得分:0)

不,这是不可能的,因为此时技术上不会定义数组。

实现这一目标的一种方法是使用array_map之类的东西。 http://php.net/manual/en/function.array-map.php

$recourd_list = array(
    'clients'=> array(
        'route' =>   'clients.index',
        'title' =>   'fullname',
        'list'  =>   Clients::orderBy('id', 'desc')->take(5)->get(),
        'count' =>   Clients::count(),
        'class' =>   'bgm-lightgreen',
    ),

    'sliders'=> array(
        'route' =>   'sliders',
        'title' =>   'title',
        'list'  =>   Sliders::orderBy('id', 'desc')->take(5)->get(),
        'count' =>   Sliders::count(),
        'class' =>   'bgm-rightBlue Oil-color',
    ),
    'sponsors'=> array(
        'route' =>   'sponsors.index',
        'title' =>   'title',
        'list'  =>   Sponsors::orderBy('id', 'desc')->take(5)->get(),
        'count' =>   Sponsors::count(),
        'class' =>   'bgm-nave dark-green',
    ),
    'packages'=> array(
        'route' =>   'packages',
        'title' =>   'title',
        'list'  =>   Packages::orderBy('id', 'desc')->take(5)->get(),
        'count' =>   Packages::count(),
        'class' =>   'bgm-bluegray',
    ),
    'event_schedule'=> array(
        'route' =>   'event_schedule.index',
        'title' =>   'title',
        'list'  =>   EventSchedule::orderBy('id', 'desc')->take(5)->get(),
        'count' =>   EventSchedule::count(),
        'class' =>   'bgm-orange',
    ),
);

然后

return array_map(function ($item) {
    $item['diff'] = $item['count'] - 5;

    return $item;
}, $recourd_list);

或者,您可以将mapCollections一起使用 https://laravel.com/docs/5.3/collections#method-map

return collect($recourd_list)->map(function ($item) {
    $item['diff'] = $item['count'] - 5;

    return $item;
})->toArray();

希望这有帮助!