如何在 laravel blade 中显示数组的动态键?
How can I display dynamic key of array in the laravel blade?
我的控制器是这样的:
public function index(Request $request)
{
$param = $request->all();
$data = $this->itemDetailRepository->getData($param);
return view('item-detail.index', compact('param'))
->withItems(count($data)>0?$data:null);
}
如果我调试 $data
或 laravel (dd($data)
),结果如下:
所以数组 $data
是 collection 和这样的分页
如果我点击属性部分,它显示如下:
#attributes: array:5 [▼
"item_number" => "AB-0001"
"total_quantity" => "1000"
"location-a" => "500"
"location-b" => "500"
]
所以数组数据在那里
在视图中 blade laravel 像这样:
<table>
<tr>
<th>ITEM NUMBER</th>
<th>TOTAL QUANTITY</th>
<th>LOCATION-A</th>
<th>LOCATION-B</th>
</tr>
@foreach($items as $item)
<tr>
<td>{{ $item->item_number }}</td>
<td>{{ $item->total_quantity }}</td>
<td>{{ $item['location-a'] }}</td>
<td>{{ $item['location-b'] }}</td>
</tr>
@endforeach
</table>
有效。但是我的数组键是动态的。密钥可以改变
所以数组可以像这样改变:
#attributes: array:5 [▼
"item_number" => "AB-0001"
"total_quantity" => "500"
"location-a" => "500"
]
或者可以这样改:
#attributes: array:5 [▼
"item_number" => "AB-0001"
"total_quantity" => "1500"
"location-a" => "500"
"location-b" => "500"
"location-c" => "500"
]
所以位置是动态的
如何在 laravel 视图中设置它 blade 以便它可以适应动态数组?
更新
如果我echo '<pre>';print_r($data);'</pre>';die();
,结果是这样的:
Illuminate\Pagination\LengthAwarePaginator Object
(
[total:protected] => 2428
[lastPage:protected] => 1214
[items:protected] => Illuminate\Database\Eloquent\Collection Object
(
[items:protected] => Array
(
[0] => App\Models\ItemDetail Object
(
[table:protected] => items_details
[fillable:protected] => Array
(
[0] => item_number
[1] => quantity
...
)
[connection:protected] => mysql
[primaryKey:protected] => id
[keyType:protected] => int
[incrementing] => 1
[with:protected] => Array
(
)
[withCount:protected] => Array
(
)
[perPage:protected] => 15
[exists] => 1
[wasRecentlyCreated] =>
[attributes:protected] => Array
(
[item_number] => AB-0001
[total_quantity] => 1000
[location-a] => 500
[location-b] => 500
)
[original:protected] => Array
(
[item_number] => AB-0001
[total_quantity] => 1000
[location-a] => 500
[location-b] => 500
)
[changes:protected] => Array
(
)
[casts:protected] => Array
(
)
[dates:protected] => Array
(
)
[dateFormat:protected] =>
[appends:protected] => Array
(
)
[dispatchesEvents:protected] => Array
(
)
[observables:protected] => Array
(
)
[relations:protected] => Array
(
)
[touches:protected] => Array
(
)
[timestamps] => 1
[hidden:protected] => Array
(
)
[visible:protected] => Array
(
)
[guarded:protected] => Array
(
[0] => *
)
)
[1] => App\Models\ItemDetail Object
(
[table:protected] => items_details
[fillable:protected] => Array
(
[0] => item_number
[1] => quantity
...
)
[connection:protected] => mysql
[primaryKey:protected] => id
[keyType:protected] => int
[incrementing] => 1
[with:protected] => Array
(
)
[withCount:protected] => Array
(
)
[perPage:protected] => 15
[exists] => 1
[wasRecentlyCreated] =>
[attributes:protected] => Array
(
[item_number] => AB-0002
[total_quantity] => 1500
[location-a] => 1000
[location-b] => 500
)
[original:protected] => Array
(
[item_number] => AB-0002
[total_quantity] => 1500
[location-a] => 1000
[location-b] => 500
)
[changes:protected] => Array
(
)
[casts:protected] => Array
(
)
[dates:protected] => Array
(
)
[dateFormat:protected] =>
[appends:protected] => Array
(
)
[dispatchesEvents:protected] => Array
(
)
[observables:protected] => Array
(
)
[relations:protected] => Array
(
)
[touches:protected] => Array
(
)
[timestamps] => 1
[hidden:protected] => Array
(
)
[visible:protected] => Array
(
)
[guarded:protected] => Array
(
[0] => *
)
)
)
)
[perPage:protected] => 2
[currentPage:protected] => 1
[path:protected] => http://my-project.test/admin/item-detail
[query:protected] => Array
(
)
[fragment:protected] =>
[pageName:protected] => page
)
你的问题很混乱,如果键是动态的,你也可以发送一个数组 "key" 并且可以发送一个键这样的数组
//In your controller
$values = array(
array('item_number' => 'AB-0001','total_quantity' => '500', 'location-a' => '500'),
array('item_number' => 'AB-0002','total_quantity' => '5000', 'location-a' => '5000'),
array('item_number' => 'AB-0003','total_quantity' => '2000', 'location-a' => '2000'),
);
$data =
[
'keys' => ['item_number', 'total_quantity', 'location_a'],
'values' => $values
];
return view('some_blade', $data);
在您的blade中您可以这样访问
@foreach($values as $value)
<tr>
@foreach($keys as $k)
<td>{{ $value[$k]; }}</td>
@endforeach
</tr>
@endforeach
希望对您有所帮助。
试试这个:
@php
$counts = array_map('count', $data);
$key = array_flip($counts)[max($counts)];
@endphp
<table>
<tr>
@foreach ($data[$key] as $key => $value)
<th>{{$key}}</th>
@endforeach
</tr>
@foreach($data as $value)
<tr>
@foreach ($value as $key => $value)
<td>{{$value}}</td>
@endforeach
</tr>
@endforeach
</table>
我的控制器是这样的:
public function index(Request $request)
{
$param = $request->all();
$data = $this->itemDetailRepository->getData($param);
return view('item-detail.index', compact('param'))
->withItems(count($data)>0?$data:null);
}
如果我调试 $data
或 laravel (dd($data)
),结果如下:
所以数组 $data
是 collection 和这样的分页
如果我点击属性部分,它显示如下:
#attributes: array:5 [▼
"item_number" => "AB-0001"
"total_quantity" => "1000"
"location-a" => "500"
"location-b" => "500"
]
所以数组数据在那里
在视图中 blade laravel 像这样:
<table>
<tr>
<th>ITEM NUMBER</th>
<th>TOTAL QUANTITY</th>
<th>LOCATION-A</th>
<th>LOCATION-B</th>
</tr>
@foreach($items as $item)
<tr>
<td>{{ $item->item_number }}</td>
<td>{{ $item->total_quantity }}</td>
<td>{{ $item['location-a'] }}</td>
<td>{{ $item['location-b'] }}</td>
</tr>
@endforeach
</table>
有效。但是我的数组键是动态的。密钥可以改变
所以数组可以像这样改变:
#attributes: array:5 [▼
"item_number" => "AB-0001"
"total_quantity" => "500"
"location-a" => "500"
]
或者可以这样改:
#attributes: array:5 [▼
"item_number" => "AB-0001"
"total_quantity" => "1500"
"location-a" => "500"
"location-b" => "500"
"location-c" => "500"
]
所以位置是动态的
如何在 laravel 视图中设置它 blade 以便它可以适应动态数组?
更新
如果我echo '<pre>';print_r($data);'</pre>';die();
,结果是这样的:
Illuminate\Pagination\LengthAwarePaginator Object
(
[total:protected] => 2428
[lastPage:protected] => 1214
[items:protected] => Illuminate\Database\Eloquent\Collection Object
(
[items:protected] => Array
(
[0] => App\Models\ItemDetail Object
(
[table:protected] => items_details
[fillable:protected] => Array
(
[0] => item_number
[1] => quantity
...
)
[connection:protected] => mysql
[primaryKey:protected] => id
[keyType:protected] => int
[incrementing] => 1
[with:protected] => Array
(
)
[withCount:protected] => Array
(
)
[perPage:protected] => 15
[exists] => 1
[wasRecentlyCreated] =>
[attributes:protected] => Array
(
[item_number] => AB-0001
[total_quantity] => 1000
[location-a] => 500
[location-b] => 500
)
[original:protected] => Array
(
[item_number] => AB-0001
[total_quantity] => 1000
[location-a] => 500
[location-b] => 500
)
[changes:protected] => Array
(
)
[casts:protected] => Array
(
)
[dates:protected] => Array
(
)
[dateFormat:protected] =>
[appends:protected] => Array
(
)
[dispatchesEvents:protected] => Array
(
)
[observables:protected] => Array
(
)
[relations:protected] => Array
(
)
[touches:protected] => Array
(
)
[timestamps] => 1
[hidden:protected] => Array
(
)
[visible:protected] => Array
(
)
[guarded:protected] => Array
(
[0] => *
)
)
[1] => App\Models\ItemDetail Object
(
[table:protected] => items_details
[fillable:protected] => Array
(
[0] => item_number
[1] => quantity
...
)
[connection:protected] => mysql
[primaryKey:protected] => id
[keyType:protected] => int
[incrementing] => 1
[with:protected] => Array
(
)
[withCount:protected] => Array
(
)
[perPage:protected] => 15
[exists] => 1
[wasRecentlyCreated] =>
[attributes:protected] => Array
(
[item_number] => AB-0002
[total_quantity] => 1500
[location-a] => 1000
[location-b] => 500
)
[original:protected] => Array
(
[item_number] => AB-0002
[total_quantity] => 1500
[location-a] => 1000
[location-b] => 500
)
[changes:protected] => Array
(
)
[casts:protected] => Array
(
)
[dates:protected] => Array
(
)
[dateFormat:protected] =>
[appends:protected] => Array
(
)
[dispatchesEvents:protected] => Array
(
)
[observables:protected] => Array
(
)
[relations:protected] => Array
(
)
[touches:protected] => Array
(
)
[timestamps] => 1
[hidden:protected] => Array
(
)
[visible:protected] => Array
(
)
[guarded:protected] => Array
(
[0] => *
)
)
)
)
[perPage:protected] => 2
[currentPage:protected] => 1
[path:protected] => http://my-project.test/admin/item-detail
[query:protected] => Array
(
)
[fragment:protected] =>
[pageName:protected] => page
)
你的问题很混乱,如果键是动态的,你也可以发送一个数组 "key" 并且可以发送一个键这样的数组
//In your controller
$values = array(
array('item_number' => 'AB-0001','total_quantity' => '500', 'location-a' => '500'),
array('item_number' => 'AB-0002','total_quantity' => '5000', 'location-a' => '5000'),
array('item_number' => 'AB-0003','total_quantity' => '2000', 'location-a' => '2000'),
);
$data =
[
'keys' => ['item_number', 'total_quantity', 'location_a'],
'values' => $values
];
return view('some_blade', $data);
在您的blade中您可以这样访问
@foreach($values as $value)
<tr>
@foreach($keys as $k)
<td>{{ $value[$k]; }}</td>
@endforeach
</tr>
@endforeach
希望对您有所帮助。
试试这个:
@php
$counts = array_map('count', $data);
$key = array_flip($counts)[max($counts)];
@endphp
<table>
<tr>
@foreach ($data[$key] as $key => $value)
<th>{{$key}}</th>
@endforeach
</tr>
@foreach($data as $value)
<tr>
@foreach ($value as $key => $value)
<td>{{$value}}</td>
@endforeach
</tr>
@endforeach
</table>