카테고리 없음

'array_key_first(): Argument #1 ($array) must be of type array, int given' 오류 해결

백위한 2024. 5. 8. 21:52

게시글을 작성하면 작성자 id 정보가 데이터베이스에 저장되도록 하는 작업을 진행하는 중에 'array_key_first(): Argument #1 ($array) must be of type array, int given' 오류가 발생했다.

"array_key_first(): 인수 #1 ($array)은(는) 배열 형식이어야 합니다. 그러나 정수가 제공되었습니다." 라는 뜻이다.

 

public function store(Request $request){
    $user_id = auth()->id();
    $request = $request->validate([
        'title' => 'required',
        'details' => 'required',
        'user_id' => $user_id
    ]);
    
    $this->Board->create($request);

    return redirect()->route('boards.index');
}

 

이 오류는 PHP에서 주어진 인수의 유형이 배열이어야 하는데 정수(int)가 전달되었을 때 발생한다.

이런 오류가 발생하는 이유는 다음과 같다.

 

1. 함수 호출 시 올바른 유형의 인수를 전달하지 않은 경우

이 함수를 호출할 때 배열이 아닌 정수를 전달하면 오류가 발생한다.

 

2. 함수가 기재한 대로 사용되지 않은 경우

코드의 다른 부분에서 예상치 못한 이유로 함수에 올바르지 않은 유형의 인수가 전달되기도 한다.

이 경우에는 함수 호출 부분에서 코드를 검토하여 해당 인수가 어디서 전달되는지 확인해야 한다.

 

 

내 경우에는 2번 문제였다.

 

 

'$request' 변수가 배열이 아니라 '$request->validate()' 메소드로부터 반환되는 값인데 이 값을 다수 '$request' 변수에 할당한 것이다.

이를 해결하기 위해서는 데이터를 새로운 변수에 할당해야 한다.

 

'array_merge()' 함수를 사용하여 '$request' 배열과 추가로 생성한 '['user_id' => $user_id]' 배열을 병합했다.

 

'array_merge()' 함수는 하나 이상의 배열을 병합하여 하나의 배열로 만드는 PHP 함수이다.

이 함수는 인수로 전달된 배열들을 순서대로 병합하여 새로운 배열을 반환한다.

 

수정한 코드는 다음과 같다.

public function store(Request $request){
    $request = $request->validate([
        'title' => 'required',
        'details' => 'required',
    ]);

    $user_id = auth()->id();
    $boardData = array_merge($request, ['user_id' => $user_id]);
    $this->Board->create($boardData);

    return redirect()->route('boards.index');
}

 

 

 

 

 

참고

https://laracasts.com/discuss/channels/livewire/array-key-first-argument-1-array-must-be-of-type-array-int-given

 

https://laracasts.com/discuss/channels/livewire/array-key-first-argument-1-array-must-be-of-type-array-int-given

 

laracasts.com