php как проверить является ли переменная массивом

Как проверить, является ли переменная массивом? … или что-то вроде массива

Поэтому перед тем, как foreach я тестирую это:

И, во-вторых, что более важно, я полагаю, что эта функция существует, было бы достаточно, чтобы проверить, является ли переменная is_array или «реализует интерфейс Iterator » или мне нужно проверить что-то еще?

Если вы используете foreach внутри функции, и вы ожидаете массив или объект Traversable, вы можете ввести подсказку о том, что функция:

Если вы не используете foreach внутри функции или вы ожидаете, что вы можете просто использовать эту конструкцию, чтобы проверить, можете ли вы перебирать переменную:

foreach может обрабатывать массивы и объекты. Вы можете проверить это с помощью:

Вам не нужно специально проверять на Traversable как другие намекали на это в своих ответах, потому что все объекты – как и все массивы – проходят через PHP.

foreach работает со всеми видами трассировок, т. е. с массивами, с обычными объектами (где доступны доступные свойства) и объектами Traversable (или, скорее, объектами, которые определяют внутренний обработчик get_iterator ).

Проще говоря, в общем программировании PHP, всякий раз, когда переменная

вы можете использовать foreach на нем.

Вы можете проверить экземпляр Traversable с помощью простой функции. Это будет работать для всего этого Iterator потому что Iterator extends Traversable

Источник

Как определить, является ли переменная массивом

каков наилучший де-факто стандартный кросс-браузерный метод для определения того, является ли переменная в JavaScript массивом или нет?

поиск в интернете есть ряд различных предложений, некоторые хорошие и довольно много недействительных.

например, следующий базовый подход:

однако обратите внимание, что происходит, если массив пуст, или obj на самом деле не является массивом, но реализует свойство length и т. д.

Так что реализация является ли лучшим с точки зрения реальной работы, будучи кросс-браузером и по-прежнему эффективно работать?

12 ответов:

это не будет работать, если объект передается через границы кадра, а каждый кадр имеет свою собственную

прибытие ECMAScript 5th Edition дает нам самый надежный метод тестирования, если переменная является массивом,массив.isArray ():

Я не буду вдаваться во все мелкие детали решения здесь, Если вы заинтересованы в том, что вы можете прочитать этот блог. Однако, если вы хотите решение, которое работает во всех браузерах, вы можете использовать:

Он не совсем нерушим, но он будет сломан только тем, кто изо всех сил пытается его сломать. Он работает вокруг проблем в IE7 и ниже и IE9. ошибка все еще существует в IE 10 PP2, но это может быть исправлено до релиза.

PS, Если вы не уверены в решении, то я рекомендую вам проверить его на содержание вашего сердца и/или прочитать сообщение в блоге. Есть и другие потенциальные решения, если вам неудобно использовать условную компиляцию.

Крокфорд имеет два ответа на странице 106 «хорошие части.»Первый проверяет конструктор, но даст ложные негативы в разных кадрах или окнах. Вот второй:

Крокфорд указывает, что эта версия будет идентифицировать arguments массив как массив, даже если он не имеет ни одного из методов массива.

есть еще интересная дискуссия (пост-хорошие части)здесь который включает в себя это предложение:

все обсуждение заставляет меня никогда не хотеть знать, является ли что-то массивом.

jQuery реализует функцию isArray, которая предлагает лучший способ сделать это

кража у гуру Джона отставки и jquery:

что вы собираетесь делать со значением, как только вы решите, что это массив?

например, если вы собираетесь перечислить содержащиеся значения, если это выглядит как массив или если это объект, используемый в качестве хэш-таблицы, то следующий код получает то, что вы хотите (этот код останавливается, когда функция закрытия возвращает что-либо, кроме «undefined». Обратите внимание, что он не выполняет итерацию по COM-контейнерам или перечислениям; это остается в качестве упражнения для читатель):

On w3school есть пример, который должен быть вполне стандартным.

чтобы проверить, является ли переменная массивом, они используют что-то похожее на это

протестировано на Chrome, Firefox, Safari, ie7

если вы делаете это в CouchDB (SpiderMonkey), то используйте

как array.constructor === Array или array instanceof Array не работают. Используя array.toString() === «[object Array]» работает, но, кажется, довольно сомнительный в сравнении.

один из лучших исследованных и обсуждаемых вариантов этой функции можно найти на сайт PHPJS. Вы можете ссылаться на пакеты, или вы можете перейти к напрямую. Я настоятельно рекомендую сайт для хорошо построенных эквивалентов функций PHP в JavaScript.

недостаточно ссылок, равных конструкторам. Иногда они имеют разные ссылки конструктора. Поэтому я использую их строковые представления.

заменить Array.isArray(obj) by obj.constructor==Array

Array(’44’,’55’).constructor==Array return true (IE8 / Chrome)

’55’.constructor==Array return false (IE8 / Chrome)

Источник

is_array

(PHP 4, PHP 5, PHP 7, PHP 8)

is_array — Определяет, является ли переменная массивом

Описание

Определяет, является ли данная переменная массивом.

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

Возвращаемые значения

Примеры

Пример #1 Проверяет, является ли переменная массивом

Результат выполнения данного примера:

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

User Contributed Notes 30 notes

Please note that the ‘cast to array’ check is horrendously out of date.

Running that code against PHP 5.6 results in this:

is_array : 0.93975400924683
cast, === : 1.2425191402435

So, please use ‘is_array’, not the horrible casting hack.

Or you could make use of the array_diff_key and array_key function:

?>

The above code outputs:
I’m an assoc array.
I’m not an assoc array.
I’m not an assoc array.
I’m not an assoc array.
I’m not an assoc array.
I’m not an assoc array.

Yet another simpler, faster is_assoc():

I’ve found a faster way of determining an array. If you use is_array() millions of times, you will notice a *huge* difference. On my machine, this method takes about 1/4 the time of using is_array().

Cast the value to an array, then check (using ===) if it is identical to the original.

Prints something like:

What’s faster for determining arrays?

is_array : 7.9920151233673
cast, === : 1.8978719711304

Tested 1000000 iterations.

hperrin’s results have indeed changed in PHP 7. The opposite is now true, is_array is faster than comparison:

is_array : 0.52148389816284
cast, === : 0.84179711341858

Tested 1000000 iterations.

The next post is not correct because has problems with blank array index:
https://www.php.net/manual/es/function.is-array.php#89332

The next code use the above link php code

«Associative arrays are arrays that use named keys that you assign to them.»
https://www.w3schools.com/php/php_arrays.asp

If you want check pure assoc. array replace > 0 by === count($array)

So here’s the modified (is_vector) version

or you can add check is_array in functions

is_assoc1(): 2.1628699302673
is_assoc2(): 1.1079933643341
is_assoc3(): 1.7120850086212
is_assoc4(): 3.9194552898407
is_assoc5(): 1.9509885311127

Using is_array prior to an in_array within an if clause will safely escape a check against a variable that could potentially be a non-array when using in_array. For instance:

NOTE: A real use case might be that we have a list of possible flags which in a database we have stored whether each of the flags are 0 or 1. We want a list of the flags which have the value of 1 to be returned.

Our example here will not use so many technical artifacts, but will be based on similar logic just to get the point across.

?>

Hope that can help someone, I know it helped me.

I would change the order of the comparison, because if it is really an empty array, it is better to stop at that point before doing several ‘cpu & memory intensive’ function calls.

In the end on a ratio of 3 not empty arrays to 1 empty array computed for 1000000 iterations it needed 10% less time.
Or the other way round:
It needed approx 3% to 4% more time if the array is not empty, but was at least 4 times faster on empty arrays.

Additionally the memory consumption veritably lesser.

The is_associative_array() and is_sequential_array() functions posted by ‘rjg4013 at rit dot edu’ are not accurate.

The functions fail to recognize indexes that are not in sequence or in order. For example, array(0=>’a’, 2=>’b’, 1=>’c’) and array(0=>’a’, 3=>’b’, 5=>’c’) would be considered as sequential arrays. A true sequential array would be in consecutive order with no gaps in the indices.

The following solution utilizes the array_merge properties. If only one array is given and the array is numerically indexed, the keys get re-indexed in a continuous way. The result must match the array passed to it in order to truly be a numerically indexed (sequential) array. Otherwise it can be assumed to be an associative array (something unobtainable in languages such as C).

The following functions will work for PHP >= 4.

And here is another variation for a function to test if an array is associative. Based on the idea by mot4h.

A slight modification of what’s below:

Источник

Проверка на массив, на наличие элементов и на пустоту в PHP

php как проверить является ли переменная массивом. Смотреть фото php как проверить является ли переменная массивом. Смотреть картинку php как проверить является ли переменная массивом. Картинка про php как проверить является ли переменная массивом. Фото php как проверить является ли переменная массивом

В этой статье будем делать различные проверки массива. В том числе проверим является ли переменная массивом, а так же проверим есть ли у ключей массива пустые значения. Будем двигаться от простого к более сложному. И первое, что можно сделать, это проверить на массив. Для этого нам помоет встроенная в язык PHP функция is_array. Разберем небольшой пример.

$arr = [‘id’, ‘name’, ’email’]; // Массив элементов if(is_array($arr))< echo 'Это массив'; >else

Функция вернет true, если это массив и false — если не массив. Это простой пример и сложностей возникнуть не должно. Перейдем к следующему примеру.

Проверка массива на пустоту и пустые элементы в PHP

Функция empty сработает только в том случае, когда в массиве нет вообще никаких элементов. Поэтому ее лучше не использовать при проверке массивов. В этом случае нам поможет еще одна функция — array_diff. С ее помощью мы сравним исходный массив с другим массивом и в случае расхождения выведем элементы массива, которые не совпадают. Может быть немного сумбурно и не понятно, но давайте разберем на примере.

array(8) < [0]=>string(4) «name» [1]=> string(0) «» [2]=> string(3) «num» [3]=> [4]=> string(0) «» [5]=> [6]=> string(4) «Alex» [7]=> string(0) «» > array(3) < [0]=>string(4) «name» [2]=> string(3) «num» [6]=> string(4) «Alex» >

Функция пропустит все пустые элемент массива, в том числе NULL и false и выведет только те, в которых что-то есть. Мы так же можем проверить какой именно элемент массива был пустой с помощью цикла for.

array(4) < ["age"]=>int(34) [«name»]=> string(4) «Ivan» [«city»]=> string(0) «» [«number»]=> string(0) «» > array(2) < ["age"]=>int(34) [«name»]=> string(4) «Ivan» >

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

Для этих целей подойдет функция in_array. Она проверяет на присутствие в массиве значения.

Первым аргументом указываем что будем искать, вторым — где. На этом по работе с массивами окончен. Надеюсь, что вам в нем все было понятно. Но если остались какие-то вопросы, задавайте их в комментариях.

Источник

is_int

(PHP 4, PHP 5, PHP 7, PHP 8)

is_int — Проверяет, является ли переменная целым числом

Описание

Проверяет, является ли тип переменной целочисленным.

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

Возвращаемые значения

Примеры

Пример #1 Пример использования is_int()

Результат выполнения данного примера:

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

User Contributed Notes 30 notes

I’ve found that both that is_int and ctype_digit don’t behave quite as I’d expect, so I made a simple function called isInteger which does. I hope somebody finds it useful.

var_dump ( is_int ( 23 )); //bool(true)
var_dump ( is_int ( «23» )); //bool(false)
var_dump ( is_int ( 23.5 )); //bool(false)
var_dump ( is_int ( NULL )); //bool(false)
var_dump ( is_int ( «» )); //bool(false)

var_dump ( ctype_digit ( 23 )); //bool(true)
var_dump ( ctype_digit ( «23» )); //bool(false)
var_dump ( ctype_digit ( 23.5 )); //bool(false)
var_dump ( ctype_digit ( NULL )); //bool(false)
var_dump ( ctype_digit ( «» )); //bool(true)

var_dump ( isInteger ( 23 )); //bool(true)
var_dump ( isInteger ( «23» )); //bool(true)
var_dump ( isInteger ( 23.5 )); //bool(false)
var_dump ( isInteger ( NULL )); //bool(false)
var_dump ( isInteger ( «» )); //bool(false)
?>

The correct output for parts of his examples should be:

Keep in mind that is_int() operates in signed fashion, not unsigned, and is limited to the word size of the environment php is running in.

In a 32-bit environment:

( 2147483647 ); // true
is_int ( 2147483648 ); // false
is_int ( 9223372036854775807 ); // false
is_int ( 9223372036854775808 ); // false
?>

In a 64-bit environment:

( 2147483647 ); // true
is_int ( 2147483648 ); // true
is_int ( 9223372036854775807 ); // true
is_int ( 9223372036854775808 ); // false
?>

If you find yourself deployed in a 32-bit environment where you are required to deal with numeric confirmation of integers (and integers only) potentially breaching the 32-bit span, you can combine is_int() with is_float() to guarantee a cover of the full, signed 64-bit span:

= 2147483647 ; // will always be true for is_int(), but never for is_float()
$big = 9223372036854775807 ; // will only be true for is_int() in a 64-bit environment

I’ve found a faster way of determining an integer.
On my env, this method takes about half the time of using is_int().

Cast the value then check if it is identical to the original.

With this function you can check if every of multiple variables are int. This is a little more comfortable than writing ‘is_int’ for every variable you’ve got.

Simon Neaves’s answer is incomplete: negative integers will return false.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *