Проверить каждый элемент массива php

Смотрите также

A simple trick that can help you to guess what diff/intersect or sort function does by name.

[suffix] assoc — additional index check. Compares both value and index.

Example: array_diff_assoc, array_intersect_assoc.

[suffix] key — index only check. Ignores value of array, compares only indexes.

Example: array_diff_key, array_intersect_key.

[suffix] **empty** — no «key» or «assoc» word in suffix. Compares values only. Ignores indexes of array.

Example: array_diff, array_intersect.

[prefix] u — will do comparison with user defined function. Letter u can be used twice in some functions (like array_udiff_uassoc), this means that you have to use 2 functions (one for value, one for index).

Example: array_udiff_uassoc, array_uintersect_assoc.

This also works with array sort functions:

[prefix] a — associative. Will preserve keys. [prefix] k — key sort. Will sort array by keys. [prefix] r — reverse. Will sort array in reverse order. [prefix] u — sort by user defined function (same as for diff/intersect).

Big arrays use a lot of memory possibly resulting in memory limit errors. You can reduce memory usage on your script by destroying them as soon as you´re done with them. I was able to get over a few megabytes of memory by simply destroying some variables I didn´t use anymore.
You can view the memory usage/gain by using the funcion memory_get_usage(). Hope this helps!

I need to take an element from the Array and change its position within the Array by moving the rest of the elements as required.
This is the function that does it. The first parameter is the working Array. The second is the position of the element to move and the third is the position where to move the element.
The function returns the modified Array.
function array_move_elem ( $array , $from , $to ) if ( $from == $to ) < return $array ; >
$c = count ( $array );
if (( $c > $from ) and ( $c > $to )) if ( $from < $to ) $f = $array [ $from ];
for ( $i = $from ; $i < $to ; $i ++) $array [ $i ] = $array [ $i + 1 ];
>
$array [ $to ] = $f ;
> else $f = $array [ $from ];
for ( $i = $from ; $i > $to ; $i —) $array [ $i ] = $array [ $i — 1 ];
>
$array [ $to ] = $f ;
>

?>
Examples:
$array = array( ‘Cero’ , ‘Uno’ , ‘Dos’ , ‘Tres’ , ‘Cuatro’ , ‘Cinco’ , ‘Seis’ , ‘Siete’ , ‘Ocho’ , ‘Nueve’ , ‘Diez’ );
$array = array_move_elem ( $array , 3 , 5 ); // Move element in position 3 to position 5.
print_r ( $array );

$array = array_move_elem ( $array , 5 , 3 ); // Move element in position 5 to position 3, leaving array as it was. 😉
print_r ( $array );

?>
Return:
Array ( [ 0 ] => Cero [ 1 ] => Uno [ 2 ] => Dos [ 3 ] => Cuatro [ 4 ] => Cinco [ 5 ] => Tres [ 6 ] => Seis [ 7 ] => Siete [ 8 ] => Ocho [ 9 ] => Nueve [ 10 ] => Diez )
Array ( [ 0 ] => Cero [ 1 ] => Uno [ 2 ] => Dos [ 3 ] => Tres [ 4 ] => Cuatro [ 5 ] => Cinco [ 6 ] => Seis [ 7 ] => Siete [ 8 ] => Ocho [ 9 ] => Nueve [ 10 ] => Diez )
?>

Читайте также:  Php уменьшить изображение до размера

Updated code of ‘indioeuropeo’ with option to input string-based keys.

FUNCTION:
function array_move_elem ( $array , $from , $to ) // return if non-numeric couldn’t be found or from=to
if(! is_numeric ( $from )) if( array_search ( $from , array_keys ( $array ))!== FALSE ) $from = array_search ( $from , array_keys ( $array ));
>else return $array ;
>
>
$array_numeric_keys = array();
foreach( $array as $k => $v ) $array_numeric_keys [] = $k ;
>
if ( $from == $to ) < return $array ; >
$c = count ( $array_numeric_keys );
if (( $c > $from ) and ( $c > $to )) if ( $from < $to ) $f = $array_numeric_keys [ $from ];
for ( $i = $from ; $i < $to ; $i ++) $array_numeric_keys [ $i ] = $array_numeric_keys [ $i + 1 ];
>
$array_numeric_keys [ $to ] = $f ;
> else $f = $array_numeric_keys [ $from ];
for ( $i = $from ; $i > $to ; $i —) $array_numeric_keys [ $i ] = $array_numeric_keys [ $i — 1 ];
>
$array_numeric_keys [ $to ] = $f ;
>

>
$array_new = array();
foreach( $array_numeric_keys as $v ) $array_new [ $v ] = $array [ $v ];
>
return $array_new ;
>
?>

Here is a function to find out the maximum depth of a multidimensional array.

// return depth of given array
// if Array is a string ArrayDepth() will return 0
// usage: int ArrayDepth(array Array)

function ArrayDepth ( $Array , $DepthCount =- 1 , $DepthArray =array()) $DepthCount ++;
if ( is_array ( $Array ))
foreach ( $Array as $Key => $Value )
$DepthArray []= ArrayDepth ( $Value , $DepthCount );
else
return $DepthCount ;
foreach( $DepthArray as $Value )
$Depth = $Value > $Depth ? $Value : $Depth ;
return $Depth ;
>
?>

While PHP has well over three-score array functions, array_rotate is strangely missing as of PHP 5.3. Searching online offered several solutions, but the ones I found have defects such as inefficiently looping through the array or ignoring keys.

The following array_rotate() function uses array_merge and array_shift to reliably rotate an array forwards or backwards, preserving keys. If you know you can trust your $array to be an array and $shift to be between 0 and the length of your array, you can skip the function definition and use just the return expression in your code.

function array_rotate ( $array , $shift ) if(! is_array ( $array ) || ! is_numeric ( $shift )) if(! is_array ( $array )) error_log ( __FUNCTION__ . ‘ expects first argument to be array; ‘ . gettype ( $array ). ‘ received.’ );
if(! is_numeric ( $shift )) error_log ( __FUNCTION__ . ‘ expects second argument to be numeric; ‘ . gettype ( $shift ). » ` $shift ` received.» );
return $array ;
>
$shift %= count ( $array ); //we won’t try to shift more than one array length
if( $shift < 0 ) $shift += count ( $array ); //handle negative shifts as positive
return array_merge ( array_slice ( $array , $shift , NULL , true ), array_slice ( $array , 0 , $shift , true ));
>
?>
A few simple tests:
$array =array( «foo» => 1 , «bar» => 2 , «baz» => 3 , 4 , 5 );

print_r ( array_rotate ( $array , 2 ));
print_r ( array_rotate ( $array , — 2 ));
print_r ( array_rotate ( $array , count ( $array )));
print_r ( array_rotate ( $array , «4» ));
print_r ( array_rotate ( $array , — 9 ));
?>

Short function for making a recursive array copy while cloning objects on the way.

function arrayCopy ( array $array ) $result = array();
foreach( $array as $key => $val ) if( is_array ( $val ) ) $result [ $key ] = arrayCopy ( $val );
> elseif ( is_object ( $val ) ) $result [ $key ] = clone $val ;
> else $result [ $key ] = $val ;
>
>
return $result ;
>
?>

Читайте также:  Dreamweaver psd to html

/*to change an index without rewriting the whole table and leave at the same place.
*/
function change_index (& $tableau , $old_key , $new_key ) $changed = FALSE ;
$temp = 0 ;
foreach ( $tableau as $key => $value ) switch ( $changed ) case FALSE :
//creates the new key and deletes the old
if ( $key == $old_key ) $tableau [ $new_key ] = $tableau [ $old_key ];
unset( $tableau [ $old_key ]);
$changed = TRUE ;
>
break;

case TRUE :
//moves following keys
if ( $key != $new_key ) $temp = $tableau [ $key ];
unset( $tableau [ $key ]);
$tableau [ $key ] = $temp ;
break;
>
else < $changed = FALSE ;>//stop
>
>
array_values ( $tableau ); //free_memory
>

//Result :
$tableau = array( 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 );
$res = print_r ( $tableau , TRUE );
$longueur = strlen ( $res ) — 1 ;
echo «Old array :\n» . substr ( $res , 8 , $longueur ) . «\n» ;

change_index ( $tableau , 2 , ‘number 2’ );
$res = print_r ( $tableau , TRUE );
$longueur = strlen ( $res ) — 10 ;
echo «New array :\n» . substr ( $res , 8 , $longueur ) . «\n» ;

Источник

Проверить наличие элемента в массиве

Проверить наличие элемента в массиве можно через функцию in_array() , которая возвращает «true» или «false».

$array = ['PHP', 'MySQL']; if (in_array('PHP', $array)) < echo 'Элемент «PHP» найден'; >

Вернуть позицию (ключ) массива

Получить позицию элемента в массиве можно через функцию array_keys() , которая возвращает ключи найденного элемента, или пустой массив, если элемент не найден.

$array = [ 90234 => 'PHP', 90421 => 'MySQL' ]; $lang_id = array_keys($array, 'PHP'); // array(90234) 

Также есть функция array_search() , которая работает как пример выше, только возвращает позицию первого найденного элемента.

$array = [ 90234 => 'PHP', 90421 => 'MySQL', 91423 => 'PHP' ]; $lang_id = array_search('PHP', $array); // 90234 

Число «0» в in_array()

Если будет идти поиск числа «0», то функция in_array() всегда будет возвращать «true» (т.е. элемент найден).

// пример in_array(), когда в массиве есть «0» $array = ['PHP', 'MySQL', 0]; in_array('PHP', $array); // Элемент найден in_array('Python', $array); // Элемент найден in_array('Ruby', $array); // Элемент найден 

Функция in_array() проверяет каждый элемент массива, сравнивая их с переданным параметром. На каждом шаге параметр преобразуется в тип данных текущего элемента массива. И когда она дойдёт до «0», строка преобразуется в число и будет равняться «0», а число «0» есть в массиве. Поэтому если в массиве есть число ноль и идёт поиск строки, то in_array() всегда будет возвращать «true».

В этой ситуации для функции in_array() рекомендуется добавлять третий параметр true , который будет также проверять тип данных.

$array = ['PHP', 'MySQL', 0]; // с параметром «true» in_array('PHP', $array, true); // Элемент найден in_array('Ruby', $array, true); // Элемент не найден in_array('0', $array, true); // Элемент не найден in_array(0, $array, true); // Элемент найден 

Авторизуйтесь, чтобы добавлять комментарии

Источник

Дополнения к функции in_array()

PHP-функция in_array() проверяет, присутствует ли в массиве значение:

$array = array("Mac", "NT", "Irix", "Linux"); if (in_array('Irix', $array))

Но в некоторых моментах её будет не достаточно, далее подробнее:

Проверка сразу нескольких значений в массиве

Если требуется проверить наличие сразу нескольких значений в массиве – функция in_array_all() .

function in_array_all($needles, $haystack)

Пример использования:

$array = array('Mac', 'NT', 'Irix', 'Linux'); if (in_array_all(array('Mac', 'Win'), $array)) < echo 'true'; >else < echo 'false'; // Выведется false т.к. в $array нет 'Win' >

Одно из нескольких значений в массиве

Если требуется проверить вхождение хотя бы одного из нескольких значений, подойдет функция in_array_any() .

function in_array_any($needles, $haystack)

Пример использования:

$array = array('Mac', 'NT', 'Irix', 'Linux'); if (in_array_any(array('Mac', 'Win'), $array)) < echo 'true'; // Выведется true т.к. в $array есть 'Mac' >else

in_array для многомерного массива

Для поиска значения в многомерном массиве поможет функция in_array_r() :

function in_array_r($needle, $haystack, $strict = false) < foreach ($haystack as $item) < if (($strict ? $item === $needle : $item == $needle) || (is_array($item) && in_array_r($needle, $item, $strict))) < return true; >> return false; >

Пример использования:

$array = array( 0 => array('Mac'), 1 => array('NT'), 2 => array('Irix'), 3 => array('Linux') ); if (in_array_r('Mac', $array)) < echo 'true'; // Выведется true >else

Комментарии

Другие публикации

Сортировка массивов

В продолжении темы работы с массивами поговорим о типичной задаче – их сортировке. Для ее выполнения в PHP существует множество функций, их подробное описание можно посмотреть на php.net, рассмотрим.

Читайте также:  Php все переменные переданные в функцию

PHP функции для checked и selected

Две мини функции которые облегчают выделения полей select, radio и checkbox до и после отправки форм.

Автоматическое сжатие и оптимизация картинок на сайте

Изображения нужно сжимать для ускорения скорости загрузки сайта, но как это сделать? На многих хостингах нет.

Источник

How to check if an array value exists?

Is it possible to have an array with identical keys? Wouldn’t the second value overwrite the original?

if(isset($something['say']) && $something['say'] === 'bla') < // do something >

By the way, you are assigning a value with the key say twice, hence your array will result in an array with only one value.

Using: in_array()

$search_array = array('user_from','lucky_draw_id','prize_id'); if (in_array('prize_id', $search_array))

Here is output: The ‘prize_id’ element is in the array

Using: array_key_exists()

$search_array = array('user_from','lucky_draw_id','prize_id'); if (array_key_exists('prize_id', $search_array))

In conclusion, array_key_exists() does not work with a simple array. Its only to find whether an array key exist or not. Use in_array() instead.

Here is more example:

 'bla', 'b' => 'omg'); if (in_array('omg', $something)) < echo "|1| The 'omg' value found in the assoc array ||"; >/**++++++++++++++++++++++++++++++++++++++++++++++ * 2. example with index array using in_array * * IMPORTANT NOTE: in_array is case-sensitive * in_array — Checks if a value exists in an array * * DOES NOT WORK FOR MULTI-DIMENSIONAL ARRAY *++++++++++++++++++++++++++++++++++++++++++++++ */ $something = array('bla', 'omg'); if (in_array('omg', $something)) < echo "|2| The 'omg' value found in the index array ||"; >/**++++++++++++++++++++++++++++++++++++++++++++++ * 3. trying with array_search * * array_search — Searches the array for a given value * and returns the corresponding key if successful * * DOES NOT WORK FOR MULTI-DIMENSIONAL ARRAY *++++++++++++++++++++++++++++++++++++++++++++++ */ $something = array('a' => 'bla', 'b' => 'omg'); if (array_search('bla', $something)) < echo "|3| The 'bla' value found in the assoc array ||"; >/**++++++++++++++++++++++++++++++++++++++++++++++ * 4. trying with isset (fastest ever) * * isset — Determine if a variable is set and * is not NULL *++++++++++++++++++++++++++++++++++++++++++++++ */ $something = array('a' => 'bla', 'b' => 'omg'); if($something['a']=='bla') < echo "|4| Yeah!! 'bla' found in array ||"; >/** * OUTPUT: * |1| The 'omg' element value found in the assoc array || * |2| The 'omg' element value found in the index array || * |3| The 'bla' element value found in the assoc array || * |4| Yeah!! 'bla' found in array || */ ?> 

Источник

Оцените статью