Current Location: Home> Latest Articles> What happens to array_flip() when the array value is resource?

What happens to array_flip() when the array value is resource?

M66 2025-05-18

In PHP, array_flip() is a very practical function. Its function is to exchange keys and values ​​in the array, i.e.:

 array_flip(array $array): array

It returns a new array, taking the value of the original array as the key and the original key as the value. However, when the value in the array is the resource type**, the situation becomes somewhat subtle.

What is the resource type?

In PHP, resource is a special variable used to represent references to external resources, such as database connections, open file handles, image resources, etc. For example:

 $fp = fopen('http://m66.net/sample.txt', 'r');
var_dump($fp);
// The output is similar:resource(3) of type (stream)

This is not a string, integer, floating point number, or array, but a reference type used internally in PHP and cannot be directly used in most contexts where strings or numbers are required.

array_flip() handles resource type

When you try to use array_flip() on an array containing resource type values, PHP tries to convert these values ​​into strings as keys to the new array. However, resource types cannot be converted to strings in an explicit and consistent manner. This may cause some problems.

Let's look at a practical example:

 $fp1 = fopen('http://m66.net/file1.txt', 'r');
$fp2 = fopen('http://m66.net/file2.txt', 'r');

$arr = [
    'file1' => $fp1,
    'file2' => $fp2,
];

$flipped = array_flip($arr);

print_r($flipped);

You may expect to output an array with keys as resources and values ​​as original keys. But in fact, array_flip() will convert the resource type to a resource ID in the form of a string , such as "Resource id #3" as the key:

 Array
(
    [Resource id #3] => file1
    [Resource id #4] => file2
)

Potential problems

1. Unpredictability of keys

Resource IDs are dynamically allocated, and different IDs may be obtained from different requests, different machines, and different runtimes. This means that the flipped array cannot guarantee consistency and cannot be used for any operations that require deterministic keys, such as cache or hash comparison.

2. Key conflict

If you use multiple resources, but some resources become consistent after string conversion (although rare), key conflicts may occur, array_flip() only retains the last value, and the rest will be overwritten.

3. Irreversibility

array_flip() is theoretically reversible (that is, array_flip() will restore the original state for the flipped array), but since the string representation of the resource is not reducible, this process cannot be restored to the original resource variable.

Suggestions and alternatives

If you do need to flip the array, make sure the value is a string or integer type . For arrays containing resources, array_flip() should not be used directly. A viable alternative is to construct the mapping table yourself, for example: