Как проверить, является ли массив пустым с помощью PHP?

Используйте getGeneratedKeys (), если ваш драйвер JDBC поддерживает его. Вы не хотите гадоваться, пытаясь получить ключ самостоятельно после вставки. Если ваш драйвер не поддерживает getGeneratedKeys (), я получаю следующее значение от ключа до вставки.

414
задан Cœur 2 January 2017 в 19:16
поделиться

5 ответов

Если нужно просто проверить, нет ли в массиве ЛЮБОГО элемента

if (empty($playerlist)) {
     // list is empty.
}

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

foreach ($playerlist as $key => $value) {
    if (empty($value)) {
       unset($playerlist[$key]);
    }
}
if (empty($playerlist)) {
   //empty array
}
689
ответ дан 22 November 2019 в 23:16
поделиться

Если вы хотите исключить ложные или пустые строки (например, 0 => ''), где использование empty() не удастся, вы можете попробовать:

if (array_filter($playerlist) == []) {
  // Array is empty!
}

array_filter() : Если обратный вызов не предоставлен, все записи массива, равные FALSE (см. Преобразование в логическое значение), будут удалены.

Если вы хотите удалить все пустые, пустые и пустые строки (''), но оставить нулевые значения (0), вы можете использовать strlen в качестве обратного вызова, например:

$is_empty = array_filter($playerlist, 'strlen') == [];
6
ответ дан kenorb 2 January 2017 в 19:16
поделиться

Пустой массив в PHP ложный, поэтому вам даже не нужно использовать empty(), как предлагали другие.

<?php
$playerList = array();
if (!$playerList) {
    echo "No players";
} else {
    echo "Explode stuff...";
}
// Output is: No players

PHP empty() определяет, не существует ли переменная или имеет значение фальси (например, array(), 0, null, false и т. Д.).

В большинстве случаев вы просто хотите проверить !$emptyVar. Используйте empty($emptyVar), если переменная, возможно, не была установлена, и вы не будете вызывать E_NOTICE; ИМО это вообще плохая идея.

145
ответ дан Cobby 2 January 2017 в 19:16
поделиться
empty($gamerow['players'])
1
ответ дан 22 November 2019 в 23:16
поделиться

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

Для программы класса 50 000 линий, вероятно, вам лучше построить ее так, как вы считаете нужным.

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

-121--3101590-

Может быть путаница в том, что вы хотите две операции в одной. Почему бы не разделить их? Стиль DSL:

var list = new ImmutableList<string>("Hello");
var list2 = list.Copy().With("World!");

Copy возвращает промежуточный объект, который является изменяемой копией исходного списка. С помощью будет возвращен новый неизменяемый список.

Обновление:

Но, имея промежуточный, изменяемый сбор вокруг не является хорошим подходом. Промежуточный объект должен содержаться в операции Копировать :

var list1 = new ImmutableList<string>("Hello");
var list2 = list1.Copy(list => list.Add("World!"));

Теперь операция Копировать принимает делегат, который получает изменяемый список, чтобы управлять результатом копирования. Это может быть намного больше, чем добавление элемента, например удаление элементов или сортировка списка. Его также можно использовать в конструкторе ImmutureList для сборки исходного списка без промежуточных неизменяемых списков.

public ImmutableList<T> Copy(Action<IList<T>> mutate) {
  if (mutate == null) return this;
  var list = new List<T>(this);
  mutate(list);
  return new ImmutableList<T>(list);
}

Теперь нет возможности неверного толкования пользователями, они естественно попадут в яму успеха .

Еще одно обновление:

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

var list1 = new ImmutableList<string>("Hello");
// rules is a specification object, that takes commands to run in the copied collection
var list2 = list1.Copy(rules => rules.Append("World!"));

Теперь вы можете создавать творческие файлы с именами правил, и вы можете раскрыть только те функциональные возможности, которые должны поддерживать Copy , а не все возможности IList .

Для использования цепочки можно создать разумный конструктор (который, конечно, не будет использовать цепочку):

public ImmutableList(params T[] elements) ...

...

var list = new ImmutableList<string>("Hello", "immutable", "World");

Или использовать тот же делегат в другом конструкторе:

var list = new ImmutableList<string>(rules => 
  rules
    .Append("Hello")
    .Append("immutable")
    .Append("World")
);

Это предполагает, что метод rules.Append возвращает это .

Вот как это выглядит в вашем последнем примере:

var suite = new TestSuite<string, int>(x => x.Length);
var otherSuite = suite.Copy(rules => 
  rules
    .Append(x => Int32.Parse(x))
    .Append(x => x.GetHashCode())
);
-121--590050-

count ($ gamerow ['players']) будет равно 0.

19
ответ дан 22 November 2019 в 23:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: