PHP 8.4는 2024년 11월에 출시될 예정이며 몇 가지 편리한 새 배열 기능을 도입할 예정입니다.
이 글에서는 이러한 새로운 기능을 간략히 살펴보고 PHP 8.4를 실행하는 프로젝트에서 해당 기능을 사용할 수 있는 방법을 살펴보겠습니다.
Laravel 개발자라면 Illuminate\Support\Collection 및 Illuminate\Support\Arr 클래스에 유사한 기능이 이미 있다는 것을 알 수 있습니다. 하지만 저는 이러한 기능이 PHP에 기본적으로 포함되어 모든 PHP 프로젝트에서 사용할 수 있다는 점을 좋아합니다.
Laravel 개발자인 독자들을 위해 PHP 8.4를 기다리지 않고도 Laravel 프로젝트에서 동일한 기능을 얻을 수 있도록 이러한 새로운 기능에 해당하는 Laravel 기능을 보여 드리겠습니다.
PHP 8.4의 새로운 "속성 후크" 기능에 대해 설명하는 다른 기사도 확인해 보세요.
array_find 함수는 콜백에 정의된 기준과 일치하는 첫 번째 요소의 값을 반환합니다. 콜백과 일치하는 요소가 없으면 함수는 null을 반환합니다.
간단한 예를 살펴보겠습니다. 우리는 일련의 제품이 있고 바코드가 123456:
인 제품을 찾고 싶다고 가정합니다.
$products = [ [ 'name' => 'Macbook Pro', 'type' => 'Laptop', 'barcode' => 123456, ], [ 'name' => 'Framework Laptop 13', 'type' => 'Laptop', 'barcode' => 789012, ], [ 'name' => 'Samsung Galaxy S24', 'type' => 'Phone', 'barcode' => 135791, ], ]; // Find the product with barcode 123456 $findProduct = array_find( array: $products, callback: function (array $product): bool { return $product['barcode'] == 123456; }, );
위 코드를 실행한 후 $findProduct는 다음과 같습니다.
[ 'name'=> 'Macbook Pro', 'type' => 'Laptop', 'barcode' => 123456, ]
화살표 함수를 두 번째 인수로 사용하여 이를 좀 더 정리할 수 있습니다.
$findProduct = array_find( array: $products, callback: fn (array $product): bool => $product['barcode'] === 123456, );
위 코드는 이전 예제와 동일한 결과를 반환합니다.
콜백과 일치하는 요소가 없으면 함수는 null을 반환합니다. 이에 대한 예를 살펴보겠습니다.
$nonExistentProduct = array_find( array: $products, callback: fn (array $product): bool => $product['barcode'] === 'invalid', );
이 경우 $nonExistentProduct는 null과 같습니다.
Laravel에서는 Arr::first 메소드를 사용하여 비슷한 결과를 얻을 수 있습니다:
use Illuminate\Support\Arr; $findProduct = Arr::first( $products, fn (array $product): bool => $product['barcode'] === 123456, );
이 함수는 array_find 함수와 유사하지만 콜백과 일치하는 첫 번째 요소의 값을 반환하는 대신 콜백과 일치하는 첫 번째 요소의 키를 반환합니다.
이전의 $products 예제 배열을 살펴보겠습니다. 이번에는 바코드가 789012:
인 제품의 키를 찾아보겠습니다.
$products = [ [ 'name' => 'Macbook Pro', 'type' => 'Laptop', 'barcode' => 123456, ], [ 'name' => 'Framework Laptop 13', 'type' => 'Laptop', 'barcode' => 789012, ], [ 'name' => 'Samsung Galaxy S24', 'type' => 'Phone', 'barcode' => 135791, ], ]; // Find the key of the product with barcode 789012 $findProduct = array_find_key( array: $products, callback: fn (array $product): bool => $product['barcode'] === 789012, );
위 코드를 실행한 후 제품이 배열의 두 번째 요소이므로 $findProduct는 1과 같습니다.
콜백과 일치하는 요소가 없으면 함수는 null을 반환합니다. 이에 대한 예를 살펴보겠습니다.
$nonExistentProduct = array_find_key( array: $products, callback: fn (array $product): bool => $product['barcode'] === 'invalid', );
이 경우 $nonExistentProduct는 null과 같습니다.
Laravel에서는 array_keys와 Arr::first 메소드의 조합을 사용하여 비슷한 결과를 얻을 수 있습니다:
use Illuminate\Support\Arr; $firstProductKey = Arr::first( array_keys($products), fn (int $key): bool => $products[$key]['barcode'] === 789012, );
위 코드에서는 먼저 array_keys를 사용하여 $products 배열의 키 배열을 가져옵니다. 그런 다음 Arr::first를 사용하여 콜백과 일치하는 첫 번째 키를 찾습니다. 이는 기본 PHP 함수보다 조금 더 장황하지만 동일한 결과를 얻습니다.
array_any 함수를 사용하면 배열의 요소 중 하나 이상이 콜백에 정의된 기준과 일치하는지 확인할 수 있습니다. 콜백과 일치하는 요소가 있으면 함수는 true를 반환합니다. 콜백과 일치하는 요소가 없으면 함수는 false를 반환합니다.
$products 예시 배열을 사용하여 노트북 유형이 있는 제품이 있는지 확인해 보겠습니다.
$anyProductsAreLaptops = array_any( array: $products, callback: fn (array $product): bool => $product['type'] === 'Laptop', );
이 경우 배열의 제품 중 하나 이상이 노트북이므로 $anyProductsAreLaptops는 true와 같습니다.
콜백과 일치하는 요소가 없으면 함수는 false를 반환합니다. 이에 대한 예를 살펴보겠습니다.
$anyProductsAreInvalid = array_any( array: $products, callback: fn (array $product): bool => $product['type'] === 'Invalid', );
이 경우 $anyProductsAreInvalid는 false와 같습니다.
컬렉션에 포함 메소드를 사용하여 Laravel에서 동일한 결과를 얻을 수 있습니다:
use Illuminate\Support\Collection; $anyProductsAreLaptops = Collection::make($products)->contains( fn (array $product): bool => $product['type'] === 'Laptop', );
위 코드에서는 $products 배열에서 컬렉션을 생성한 다음 포함 메소드를 사용하여 컬렉션에 노트북 제품이 있는지 확인합니다.
array_all 함수는 array_any 함수와 유사하지만 하나 이상의 요소가 콜백과 일치하는지 확인하는 대신 모든 요소가 콜백과 일치하는지 확인합니다. 모든 요소가 콜백과 일치하면 함수는 true를 반환합니다. 콜백과 일치하지 않는 요소가 있으면 함수는 false를 반환합니다.
$products 배열의 모든 제품이 노트북인지 확인해 보겠습니다.
$allProductsAreLaptops = array_all( array: $products, callback: fn (array $product): bool => $product['type'] === 'Laptop', );
이 경우 배열의 모든 제품이 노트북이 아니기 때문에 $allProductsAreLaptops는 false와 같습니다.
Laravel에서는 컬렉션의 Every 메소드를 사용하여 동일한 결과를 얻을 수 있습니다:
use Illuminate\Support\Collection; $allProductsAreLaptops = Collection::make($products)->every( fn (array $product): bool => $product['type'] === 'Laptop', );
위 코드에서는 $products 배열에서 컬렉션을 생성한 다음 Every 메소드를 사용하여 컬렉션의 모든 제품이 노트북인지 확인합니다.
이 기사에서는 PHP 8.4에서 사용할 수 있는 새로운 배열 함수를 사용하는 방법을 보여줬기를 바랍니다. 또한 Illuminate\Support\Collection 및 Illuminate\Support\Arr 클래스를 사용하여 Laravel에서 유사한 기능을 달성할 수 있는 방법에 대한 아이디어를 제공했을 것입니다.
이 게시물을 재미있게 읽으셨다면 유사한 주제를 더 깊이 있게 다루는 220페이지 분량의 제 전자책 "Battle Ready Laravel"을 확인해 보시는 것도 좋습니다.
또는 Laravel을 사용하여 다른 서비스에서 API를 사용하는 방법을 알려주는 440페이지짜리 전자책 "Laravel에서 API 사용"을 확인해 보세요.
제가 새 게시물을 게시할 때마다 최신 소식을 받고 싶으시면 언제든지 제 뉴스레터에 가입하세요.
계속해서 멋진 것들을 만들어 보세요! ?
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3