场景
常日前端通过api传到后真个数据,后端都是须要校验的,还有一点,数据有可能会有多余字段,常日我们可能会这么用 $_POST 如laravel中的$requst->input等,我们须要按需取,把多余字段过滤掉。
语法
array_flip ( array $array ) : array 交流数组的key与value,key编程value,value编程keyarray_intersect_key ( array $array1 , array $array2 [, array $... ] ) : array返回所有array1中同时在array2中存在的元素
利用
// 程序中须要的数据$needKeys = [ 39;username', 'age', 'gender'];// 接口中给的数据$apiResult = [ 'method' => 'post', 'version' => '0.01', 'username' => '快乐的小鸟', 'ages' => 32, 'gender' => 'man'];$result = array_intersect_key($apiResult, array_flip($needKeys));print_r($result);/Array( [username] => 快乐的小鸟 [gender] => man)/
那如果在Laravel中如何利用呢
$request->all($keys) 或者 $request->input($keys)
namespace App\Http\Controllers\Api\Export;use App\Http\Controllers\Api\Controller;use Dingo\Api\Contract\Http\Request;class TestController extends Controller{ public function index(Request $request) { $params = $request->all([ 'name', 'gender' ]); return $params; }}// 详细实现 public function all($keys = null){ $input = array_replace_recursive($this->input(), $this->allFiles()); if (! $keys) { return $input; } $results = []; // 通过in_array获取须要的字段 foreach (is_array($keys) ? $keys : func_get_args() as $key) { Arr::set($results, $key, Arr::get($input, $key)); } return $results;}