Php check if any value in array is in another array

Here's a way I am doing it after researching it for a while. I wanted to make a Laravel API endpoint that checks if a field is "in use", so the important information is: 1] which DB table? 2] what DB column? and 3] is there a value in that column that matches the search terms?

Knowing this, we can construct our associative array:

$SEARCHABLE_TABLE_COLUMNS = [
    'users' => [ 'email' ],
];

Then, we can set our values that we will check:

$table = 'users';
$column = 'email';
$value = '';

Then, we can use array_key_exists[] and in_array[] with eachother to execute a one, two step combo and then act upon the truthy condition:

// step 1: check if 'users' exists as a key in `$SEARCHABLE_TABLE_COLUMNS`
if [array_key_exists[$table, $SEARCHABLE_TABLE_COLUMNS]] {

    // step 2: check if 'email' is in the array: $SEARCHABLE_TABLE_COLUMNS[$table]
    if [in_array[$column, $SEARCHABLE_TABLE_COLUMNS[$table]]] {

        // if table and column are allowed, return Boolean if value already exists
        // this will either return the first matching record or null
        $exists = DB::table[$table]->where[$column, '=', $value]->first[];

        if [$exists] return response[]->json[[ 'in_use' => true ], 200];
        return response[]->json[[ 'in_use' => false ], 200];
    }

    // if $column isn't in $SEARCHABLE_TABLE_COLUMNS[$table],
    // then we need to tell the user we can't proceed with their request
    return response[]->json[[ 'error' => 'Illegal column name: '.$column ], 400];
}

// if $table isn't a key in $SEARCHABLE_TABLE_COLUMNS,
// then we need to tell the user we can't proceed with their request
return response[]->json[[ 'error' => 'Illegal table name: '.$table ], 400];

I apologize for the Laravel-specific PHP code, but I will leave it because I think you can read it as pseudo-code. The important part is the two if statements that are executed synchronously.

array_key_exists[] and in_array[] are PHP functions.

source:

  • //php.net/manual/en/function.array-key-exists.php

  • //php.net/manual/en/function.in-array.php

The nice thing about the algorithm that I showed above is that you can make a REST endpoint such as GET /in-use/{table}/{column}/{value} [where table, column, and value are variables].

You could have:

$SEARCHABLE_TABLE_COLUMNS = [
    'accounts' => [ 'account_name', 'phone', 'business_email' ],
    'users' => [ 'email' ],
];

and then you could make GET requests such as:

GET /in-use/accounts/account_name/Bob's Drywall [you may need to uri encode the last part, but usually not]

GET /in-use/accounts/phone/888-555-1337

GET /in-use/users/email/

Notice also that no one can do:

GET /in-use/users/password/dogmeat1337 because password is not listed in your list of allowed columns for user.

Good luck on your journey.

[PHP 4, PHP 5, PHP 7, PHP 8]

in_arrayChecks if a value exists in an array

Description

in_array[mixed $needle, array $haystack, bool $strict = false]: bool

Parameters

needle

The searched value.

Note:

If needle is a string, the comparison is done in a case-sensitive manner.

haystack

The array.

strict

If the third parameter strict is set to true then the in_array[] function will also check the types of the needle in the haystack.

Note:

Prior to PHP 8.0.0, a string needle will match an array value of 0 in non-strict mode, and vice versa. That may lead to undesireable results. Similar edge cases exist for other types, as well. If not absolutely certain of the types of values involved, always use the strict flag to avoid unexpected behavior.

Return Values

Returns true if needle is found in the array, false otherwise.

Examples

Example #1 in_array[] example

The second condition fails because in_array[] is case-sensitive, so the program above will display:

Example #2 in_array[] with strict example

Chủ Đề