Laravel 컬렉션 클래스를 사용하여 코드를 작성하는 방법
이 글은 주로 Laravel Collections 클래스를 사용하여 코드를 작성하는 방법을 소개합니다. 이제 이를 여러분과 공유합니다. 도움이 필요한 친구들이 참조할 수 있습니다.
Laravel은 몇 가지 멋진 구성 요소를 제공합니다. 현재의 모든 웹 프레임워크 중에서 최고의 구성 요소 지원. 이는 즉시 사용 가능한 보기, 인증, 세션, 캐싱, Eloquent, 대기열, 데이터 유효성 검사 및 기타 구성 요소를 제공할 뿐만 아니라 개발 도구도 제공됩니다(Valet 및 Homestead).
그러나 이 프레임워크의 가장 강력한 기능인 Collection 클래스는 초보자들에 의해 종종 무시됩니다. 이 문서에서는 컬렉션을 사용하여 코딩 효율성을 높이고, 코드 줄을 읽을 수 있게 하며, 간결한 코드를 작성하는 방법을 살펴보겠습니다.
Preview
컬렉션 사용에 대한 초기 노출은 Eloquent를 사용하여 데이터베이스 쿼리를 실행하고 foreach 문을 사용하여 반환된 데이터에서 모델 컬렉션을 탐색하는 개발자로부터 나왔습니다.
그러나 초보자는 컬렉션이 기본 데이터에 대해 작동하는 90개 이상의 메서드를 제공한다는 사실을 눈치채지 못할 수도 있습니다. 더 좋은 점은 거의 모든 메서드가 연결 작업을 지원하여 코드를 산문처럼 읽을 수 있다는 것입니다. 이렇게 하면 귀하와 다른 사용자 모두가 코드를 더 쉽게 읽을 수 있습니다.
아직 요점을 파악하지 못하셨나요? 자, 간단한 코드 조각을 검토하고 컬렉션을 사용하여 두껍고 빠르며 강력한 코드를 작성하는 방법을 살펴보겠습니다.
코드 예제
실제 세계를 만들어 봅시다. 일부 API 인터페이스를 쿼리하고 배열에 저장된 다음 결과 세트를 얻었다고 가정해 보겠습니다.
<?php // API 请求返回的结果 $data = [ ['first_name' => 'John', 'last_name' => 'Doe', 'age' => 'twenties'], ['first_name' => 'Fred', 'last_name' => 'Ali', 'age' => 'thirties'], ['first_name' => 'Alex', 'last_name' => 'Cho', 'age' => 'thirties'], ];
배열에 이름, 성, 연령 범위가 포함되어 있는 것을 볼 수 있습니다. 이제 레코드에서 age가 30세(30대)인 사용자를 가져온 후 성(last name)을 기준으로 sort을 수행한다고 가정합니다. 마지막으로, 반환된 결과가 단일 문자열이기를 바랍니다. 따라서 각 사용자는 독점적인 새 줄을 갖게 됩니다. 마지막으로 반환된 결과가 다음과 같기를 바랍니다.
이 요구 사항은 달성하기 어렵지 않은 것 같습니다. 이제 PHP를 사용하여 이 함수를 구현하는 방법을 살펴보겠습니다.
// 依据姓氏排序 usort($data, function ($item1, $item2) { return $item1['last_name'] <=> $item2['last_name']; }); // 依据年龄范围分组 $new_data = []; foreach ($data as $key => $item) { $new_data[$item['age']][$key] = $item; } ksort($new_data, SORT_NUMERIC); // 从年龄为 30 岁组里获取用户全名 $result = array_map(function($item) { return $item['first_name'].' '.$item['last_name']; }, $new_data['thirties']); // 将数组转换为字符串并以行分隔符分隔 $final = implode("\n", $result); // 译注:原文是 $final = implode($results, "\n"); implode函数接收两种顺序的参数,为了保持与文档一致所以我这边做了调整。
우리 구현 코드는 20줄을 초과하며 우아하지 않습니다. 주석과 개행 관련 코드를 제거하면 이 코드는 읽기 어려워집니다. 게다가 임시 변수와 PHP에 내장된 친숙하지 않은 정렬 방법도 사용해야 합니다.
이제 Collection 클래스를 사용하여 얼마나 간단한지 살펴보겠습니다.
collection($data)->where('age', 'thirties') ->sortBy('last_name') ->map(function($item){ return $item['first_name'].' '.$item['last_name']; }) ->implode("\n");
와우! 코드가 20줄에서 6줄로 늘어났습니다. 이제 코드가 훨씬 더 원활하게 실행될 뿐만 아니라 어떤 문제를 다루고 있는지 알려주는 주석이 필요 없이 메소드가 구현됩니다.
그러나 우리의 코드가 완벽한 무대만큼 좋아지는 것을 방해하는 한 가지 문제가 있습니다... 이름과 성을 비교하는 map 방법입니다. 솔직히 이것은 큰 문제는 아니지만 매크로 개념을 탐구하는 데 동기를 부여합니다.
컬렉션 확장
Collection 클래스는 다른 Laravel 구성 요소와 마찬가지로 매크로(매크로 가능)를 지원하므로 메서드를 추가하고 나중에 사용할 수 있습니다.
팁: 새로운 방법을 어디서나 사용할 수 있게 하려면 해당 방법을 서비스 제안에 추가해야 합니다. 저는 이 기능을 원하는 대로 구현하기 위해 MacroServiceProvider를 만들고 싶습니다.
배열에서 제공하는 필드 수를 연결하고 문자열 결과를 반환하는 메서드를 추가해 보겠습니다.
Collection::macro('toConcatenatedString', function ($fields = [], $separator = ' ') { return $this->map(function($item) use ($fields, $separator) { return implode($separator, array_map(function ($el) use ($item) { return $item[$el]; }, $fields) ); })->implode("\n"); });
이 메서드를 추가한 후 코드는 기본적으로 완벽합니다.
collect($data)->where('age', 'thirties') ->sortBy('last_name') ->toConcatenatedString(['first_name', 'last_name']);
우리 코드는 혼란에서 구해졌습니다. 20줄이 3줄로 줄었고, 코드가 깔끔하고, 누구나 바로 이해할 수 있는 명확한 기능을 갖고 있습니다.
또 다른 예
이제 두 번째 예를 살펴보겠습니다. 사용자 목록이 있다고 가정하고 역할을 기준으로 필터링한 다음 등록 시간이 5년 이상이고 성을 시작하는 사용자인 경우 추가로 필터링해야 합니다. A-M 문자를 사용하면 첫 번째 사용자만 얻을 수 있습니다.
데이터는 다음과 같습니다.
<?php // API 请求返回的结果 $users = [ ['name' => 'John Doe', 'role' => 'vip', 'years' => 7], ['name' => 'Fred Ali', 'role' => 'vip', 'years' => 3], ['name' => 'Alex Cho', 'role' => 'user', 'years' => 9], ];
PHP 구현을 사용하는 경우 코드는 다음과 같습니다.
$subset = []; foreach ($users as $user) { if ($user['role'] === 'vip' && $user['years'] >= 5) { if (preg_match('/\s[A-Z]/', $user['name'])) { $subset[] = $user; } } } return reset($subset)
참고: 두 번째 if 문을 첫 번째 문 안으로 이동할 수 있지만 저는 개인적으로 조건문이 2개 이상 있으면 코드를 읽기가 어려워지기 때문에 단일 if 문에 조건문을 2개 이하로 사용하는 것을 선호합니다.
이 코드도 나쁘지는 않지만 여전히 임시 변수를 사용해야 하고 reset 함수를 사용하여 포인터를 첫 번째 사용자로 재설정해야 합니다. 또한 우리 코드에는 4가지 수준의 들여쓰기가 있어 코드 구문 분석이 더욱 어려워집니다.
대신 컬렉션이 이 문제를 어떻게 처리하는지 살펴보겠습니다.
collect($users)->where('role', 'vip') ->map(function($user) { return preg_match('/\s[A-Z]/', $user['name']); }) ->firstWhere('years', '>=', '5');
我们将代码简化到了之前的一般左右,每一步过滤处理清晰明了,并且我们不需要引入临时变量。
遗憾的是目前集合还不支持正则匹配,所以我们使用 map 方法,不过我们可以为这个功能创建一个宏:
Collection::macro('whereRegex', function($expression, $field) { return $this->map(function ($item) use ($expression, $field) { return preg_match($expression, $item[$field]); }) });
得益于宏方法,我们的代码现在看起来如下:
collect($users) -> where('role', 'vip') -> whereRegex('/\s[A-Z]/', 'name') -> firstWhere('years', '>=', 5);
注意: 为了简单起见,我们的红仅仅适用于数组集合。如果你计划让它们可以在 Eloquent 集合上使用,你需要在此场景下做相应的代码处理才行。
不同的视角
我们可以继续列出无数的示例,但仍然无法涵盖所有可用的集合方法,并且这从来都不是本文的真正目的。
需要注意的是,通过使用 Collection 类,您不仅可以获得一个方法库来简化编程工作,还可以选择一种从根本上改善代码的方法。
你会情不自禁的将你的代码结构从代码块重构简化成一行,同时减少代码的缩进,临时变量的使用和技巧性方法,另外你还可以使用链式编程方法,这让你的代码更加便于阅读和解析,此外最重要的是减少了编码工作!
查看官方文档获取更多这个迷人的类库的使用细节:https://laravel.com/docs/coll...
提示: 你还可以获取这个 Collection 类独立安装包,在使用非 laravel 项目是会非常有帮助。感谢 Tighten Co 团队做出的努力 https://github.com/tightenco/...。
感谢阅读,快乐编码!
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!
相关推荐:
위 내용은 Laravel 컬렉션 클래스를 사용하여 코드를 작성하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

Session_Start ()로 여러 통화를하면 경고 메시지와 가능한 데이터 덮어 쓰기가 발생합니다. 1) PHP는 세션이 시작되었다는 경고를 발행합니다. 2) 세션 데이터의 예상치 못한 덮어 쓰기를 유발할 수 있습니다. 3) Session_status ()를 사용하여 반복 통화를 피하기 위해 세션 상태를 확인하십시오.

AI는 작곡가 사용을 최적화하는 데 도움이 될 수 있습니다. 특정 방법에는 다음이 포함됩니다. 1. 종속성 관리 최적화 : AI는 종속성을 분석하고 최상의 버전 조합을 권장하며 충돌을 줄입니다. 2. 자동화 된 코드 생성 : AI는 모범 사례를 준수하는 composer.json 파일을 생성합니다. 3. 코드 품질 향상 : AI는 잠재적 인 문제를 감지하고 최적화 제안을 제공하며 코드 품질을 향상시킵니다. 이러한 방법은 기계 학습 및 자연어 처리 기술을 통해 구현되어 개발자가 효율성과 코드 품질을 향상시킬 수 있도록 도와줍니다.

session_start () iscrucialinphpformanagingUsersessions.1) itiniteSanewsessionifnoneexists, 2) ResumesAnxistessions, and3) setSasessionCookieForContInuityAcrosrequests, enablingplicationsirecationSerauthenticationAndpersonalizestContent.

Laravel10의 최신 버전은 MySQL 5.7 이상, PostgreSQL 9.6 이상, SQLite 3.8.8 이상, SQLServer 2017 이상과 호환됩니다. 이러한 버전은 JSON 데이터 유형 MySQL5.7과 같은 Laravel의 ORM 기능을 지원하여 쿼리 및 스토리지 효율성을 향상시키기 때문에 선택됩니다.

Laravel과 YII의 주요 차이점은 설계 개념, 기능적 특성 및 사용 시나리오입니다. 1. Laravel은 개발의 단순성과 즐거움에 중점을두고 Eloquentorm 및 Artisan 도구와 같은 풍부한 기능을 제공하며 빠른 개발 및 초보자에게 적합합니다. 2.YII는 성능과 효율성을 강조하고, 고 부하 애플리케이션에 적합하며, 효율적인 Activerecord 및 캐시 시스템을 제공하지만 가파른 학습 곡선이 있습니다.

HTML5는 5 가지 주요 개선 사항을 제공합니다. 1. 시맨틱 태그는 코드 선명도 및 SEO 효과를 향상시킵니다. 2. 멀티미디어 지원은 비디오 및 오디오 임베딩을 단순화합니다. 3. 형태 향상은 검증을 단순화한다. 4. 오프라인 및 로컬 스토리지는 사용자 경험을 향상시킵니다. 5. 캔버스 및 그래픽 기능은 웹 페이지의 시각화를 향상시킵니다.

MySQL 기능은 데이터 처리 및 계산에 사용될 수 있습니다. 1. 기본 사용에는 문자열 처리, 날짜 계산 및 수학 연산이 포함됩니다. 2. 고급 사용에는 복잡한 작업을 구현하기 위해 여러 기능을 결합하는 것이 포함됩니다. 3. 성능 최적화를 위해서는 WHERE 절에서 기능 사용 및 GroupBy 및 임시 테이블 사용을 피해야합니다.

2024 년의 필수 Laravel 확장 패키지는 다음과 같습니다. 1. Laraveldebugbar, 코드를 모니터링하고 디버그하는 데 사용됩니다. 2. 자세한 응용 프로그램 모니터링을 제공하는 Laraveltelescope; 3. Laravelhorizon, Redis 대기열 작업 관리. 이러한 확장 팩은 개발 효율성 및 응용 프로그램 성능을 향상시킬 수 있습니다.
