Intereting Posts
Пересечение многомерных ассоциативных массивов php phpStorm запрашивает встроенный интерпретатор php-cgi. Как сделать php как быстрый cgi? Санитария при вводе пользователя с использованием белого списка Форма HTML для публикации на php-странице Кэширование пользовательской социальной доли в WordPress как переписать основной домен в подпапку без изменения URL-адреса? Что такое минимальное значение mt_rand () для PHP и как рассчитать 32-битный интергель на 32-битной Linux-панели Как браузеру известно, какие файлы cookie отправляются на сервер при запросе? Могу ли я использовать автономный уровень базы данных Laravel? Функция Twilio sms reply Как я высмеиваю Doctrine PersistentCollection в PHPUnit Отправка файла через форму по электронной почте с помощью Laravel (Localhost) Laravel 4 Query Builder – groupBy Max Date php XML DOM переводит специальные символы в & # xYY; Как убедиться, что дескриптор файла был закрыт перед следующей операцией?

Лучший способ инициализировать (пустой) массив в PHP

В некоторых других языках (например, AS3) было отмечено, что инициализация нового массива выполняется быстрее, если сделать это как var foo = [] а не var foo = new Array() для целей создания объекта и создания экземпляра. Интересно, существуют ли какие-либо эквивалентности в PHP?

 class Foo { private $arr = array(); // is there another / better way? } 

В реализациях ECMAScript (например, ActionScript или JavaScript) Array() является конструкторской функцией, а [] является частью грамматики литерала массива. Оба оптимизируются и выполняются совершенно по-разному, при этом буквальная грамматика не преследуется издержками вызова функции.

PHP, с другой стороны, имеет языковые конструкции, которые могут выглядеть как функции, но не рассматриваются как таковые. Даже с PHP 5.4, который поддерживает [] в качестве альтернативы, нет никакой разницы в накладных расходах, поскольку, насколько это касается компилятора / парсера, они полностью синонимичны.

 // Before 5.4, you could only write $array = array( "foo" => "bar", "bar" => "foo", ); // As of PHP 5.4, the following is synonymous with the above $array = [ "foo" => "bar", "bar" => "foo", ]; 

Если вам нужно поддерживать более старые версии PHP, используйте прежний синтаксис. Также есть аргумент в пользу удобочитаемости, но, будучи давним разработчиком JS, последнее кажется мне довольно естественным. Я действительно ошибся, пытаясь инициализировать массивы, используя [] когда я впервые изучал PHP.

Это изменение языка было первоначально предложено и отклонено в связи с большинством голосов против основных разработчиков по следующей причине:

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

Однако, похоже, произошла смена сердца, ведущая к 5.4, возможно, под влиянием реализаций поддержки популярных баз данных, таких как MongoDB (которые используют синтаксис ECMAScript).

 $myArray = []; 

Создает пустой массив.

Вы можете вывести значения в массив позже, например:

 $myArray[] = "tree"; $myArray[] = "house"; $myArray[] = "dog"; 

На данный момент $ myArray содержит «дерево», «дом» и «собака». Каждая из приведенных выше команд добавляется к массиву, сохраняя элементы, которые уже были там.

Придя с других языков, этот способ добавления массива мне показался странным. Я ожидал сделать что-то вроде $ myArray + = «собака» или что-то еще … или, может быть, метод «add ()», такой как коллекции Visual Basic. Но этот прямой синтаксис append является коротким и удобным.

Вы действительно должны использовать функцию unset () для удаления элементов:

 unset($myArray[1]); 

… удалит «дом» из массива (массивы основаны на нулевом значении).

 unset($myArray); 

… уничтожит весь массив.

Чтобы быть ясным, синтаксис пустой квадратной скобки для добавления к массиву – это просто способ сообщить PHP, чтобы автоматически присваивать индексы каждому значению, а не присваивать индексы. Покрытия, PHP на самом деле делает это:

 $myArray[0] = "tree"; $myArray[1] = "house"; $myArray[2] = "dog"; 

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

Поэтому, если вы это сделаете:

 $myArray[10] = "tree"; $myArray[20] = "house"; $myArray[] = "dog"; 

… для элемента «собака» будет присвоен индексный номер 21. PHP не выполняет интеллектуального сопоставления шаблонов для поэтапного присвоения индексов, поэтому он не будет знать, что вам, возможно, захотелось присвоить индекс 30 «собаке» ». Вы можете использовать другие функции, чтобы указать шаблон приращения для массива. Я не буду вдаваться в это, но все это в PHP-документах.

Ура,

– = Cameron

В PHP массив – это массив; нет примитивного и объектного рассмотрения, поэтому сопоставимой оптимизации не существует.

До PHP 5.4:

 $myArray = array(); 

PHP 5.4 и выше

 $myArray = []; 

То, что вы делаете, на 100% правильное.

С точки зрения приятного наименования часто делается то, что частным / защищенным свойствам предшествует знак подчеркивания, чтобы сделать очевидным, что они не являются общедоступными. Например private $_arr = array() или public $arr = array()

Другого пути нет , так что это самое лучшее.

Изменить: этот ответ недействителен с PHP 5.4 и выше.

Инициализация простого массива:

 <?php $array1=array(10,20,30,40,50); ?> 

Инициализация массива в массиве:

 <?php $array2=array(6,"santosh","rahul",array("x","y","z")); ?> 

Источник: Сорс для кода

Попробуй это:

  $arr = (array) null; var_dump($arr); // will print // array(0) { }