Home > Article > Backend Development > A brief discussion on the use of foreach/in_array in PHP
php is very efficient in development, which is understandable, but it is sacrificing execution efficiency. The PHP array function is very powerful, but you should also consider it more and try several situations just in case. Here, I will briefly mention the two pitfalls encountered. If more are found in the future, I will add them. !
foreach provides a simple way to traverse the array, which can easily read the contents of the data or object. However, the official documentation says that since foreach relies on the internal array pointer, modifying its value in the loop may cause Unexpected behavior. So, basically,
1. Don't try to modify the value inside the loop, otherwise the result will be beyond what you want;
2. Using '&' is a safe way, although it is rarely used. However, when used, after the reference ends, the unset function should be called immediately to destroy the variable. Otherwise, in the following code, if this variable is used again, the last value of the loop will be modified, thus Unexpected values were obtained. For example: when the list is looped out, there will be many messy values or null values in the last line of output. Using unset solves this problem.
Let’s look at an example
<?php /*-------------------------------------------------------------------------*/ /* foreach example 1: value only */ echo "foreach example 1: value only ".'<br />'; $a = array(1, 2, 3, 17); foreach ($a as $v) { echo "Current value of ".$a.":". $v."<br />"; } ?> // 运行结果 foreach example 1: value only Current value of $a: 1 Current value of $a: 2 Current value of $a: 3 Current value of $a: 17
in_array, its meaning is to check whether the previous string exists in the latter array, and in most cases, it also works like this, but when When the following array is an integer, such as array(0,1,2,3), there will be a problem. PHP will intval the previous string and get the value 0. Then if it happens, in your array With this value, the equation is established. Does it exceed expectations?
So, when it is determined that the following data is an integer, especially if it may be 0 (this may replace all strings), you must not use this function anymore. You can use key_exists instead, but The subsequent data needs to be reversed using array_flip.
Let’s look at an example again
function search($keyWord, $stack) {//此处判断是应该更新还是插入 foreach ($stack as $key => $val) { if (in_array($keyWord, $val)) { return TRUE; } } return FALSE; }
What happens when a string is used as an array to get values? PHP is a very fault-tolerant language. It will try its best to help you correct your mistakes, so it smartly converts your reference subscript into an integer. Of course, you get 0. Then the string subscript is 0 and the value is You will get the value of the first string. Is it beyond your expectation? The solution is to confirm whether the variable is an array before referencing the subscript, is_array.
For more articles on the use of foreach/in_array in PHP, please pay attention to the PHP Chinese website!