ПУСТОЙ УКАЗАТЕЛЬ по сравнению с Пустым при контакте с вводом данных пользователем

Вы можете сделать это с array-filter . Сначала извлеките все ids из первого массива, а затем отфильтруйте второй массив на основе этих идентификаторов.

$arr1 = array( (object) ["link_id"=> 35, "key" => "AAA"], (object) ["link_id"=> 373, "key" => "BBB"]);
$arr2 = array( (object) ["link_id"=> 35, "key" => "CCC"], (object) ["link_id"=> 341, "key" => "DDD"]);

$ids = array_column($arr1, "link_id");
$arr2 = array_filter($arr2, function ($e) use ($ids) {
    return !in_array($e->link_id, $ids); //keep him in arr2 only if NOT in ids of arr1
});

Обновлен более быстрый ответ Рассмотрим большой объем данных (как для комментария @mickmackusa), используйте это:

$ids = [];
foreach($arr1 as $e)
    $ids[$e->link_id] = true;

$arr2 = array_filter($arr2, function ($e) use ($ids) {
    return !isset($ids[$e->link_id]);
});

Первое решение в O(n^2), а второе находится в O(n)

6
задан Community 23 May 2017 в 10:31
поделиться

6 ответов

Я почти никогда не использую ПУСТОЙ УКАЗАТЕЛЬ при обращении к фактическим данным. При использовании для внешних ключей я скажу, что ПУСТОЙ УКАЗАТЕЛЬ допустим, но это почти никогда не допустимо для вводимых данных пользователя. Одно исключение, которое, вероятно, подходило бы вполне регулярно, для дат, которые не существуют, такие как база данных сотрудника с "termination_date" полем. В этом случае у всех текущих сотрудников должно быть значение ПУСТОГО УКАЗАТЕЛЯ в том поле. Что касается того, чтобы заставлять их на самом деле ввести нулевое значение, для значений, которые действительно требуют нулевого значения, я поместил бы флажок рядом с полем ввода так, чтобы пользователь мог проверить его и прочь видеть соответствующее значение к пустому указателю (или более удобным для пользователя способом, ни одним). Позволяя флажку установить поле в NULL, соответствующее текстовое поле должно быть отключено, и если нулевое значение уже связано, это должно начаться, как отключено и только стать включенным, после того как пользователь снял флажок с пустым флажком.

2
ответ дан 8 December 2019 в 05:24
поделиться

Я буду повреждать шаблон и скажу, что всегда использовал бы ПУСТОЙ УКАЗАТЕЛЬ для строк нулевой длины по следующим причинам.

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

  2. Как Вы располагаете в алфавитном порядке его?

  3. Можно ли однозначно определить, когда пользователь опустил вводить значение, по сравнению с намеренным оставлением его незаполненный?

  4. Как Вы однозначно запросили бы для различия? Запрос может экранировать пользователя, указывают на ПУСТОЙ УКАЗАТЕЛЬ по сравнению с пробелом с помощью стандартного входного синтаксиса формы?

  5. На практике мне никогда не мешали читать и записать данные с помощью значения по умолчанию, неудивительное поведение с помощью этого правила. Если я должен был знать различие, я использовал булево поле (который легче отобразить на однозначные устройства UI). В одном случае я использовал триггер для осуществления Верный => нулевое значение, но никогда не видел, что это вызвало, потому что уровень BR отфильтровал условие эффективно.

8
ответ дан 8 December 2019 в 05:24
поделиться

Если пользователь обеспечивает пустую строку, я всегда рассматриваю ее как пустой указатель с точки зрения базы данных. Кроме того, я буду обычно для обрезки мои строковые исходные данные, чтобы удалить продвижение/конечные пробелы и затем проверить на пустой. Это - маленькая победа в базе данных с varchar () типы, и это также уменьшает случаи для поиска, так как я только должен проверить на name is null вместо name is null or name = '' Вы могли также пойти другим путем, преобразовав пустой указатель в ''. Так или иначе выберите путь и быть последовательными.

6
ответ дан 8 December 2019 в 05:24
поделиться

Я пытаюсь сохранить вещи простыми. В этом случае я сделал бы столбец имени не-nullable и позволил бы пробелы. Иначе у Вас будет три случая для контакта с где угодно, Вы обращаетесь к этому полю:

  1. Пустое имя
  2. Пустое имя
  3. Непустое имя

Если Вы идете с 'пробелом, пустой' или 'пустой указатель, пробел', затем Вы - до двух случаев. Два случая лучше, чем три.

Далее отвечать на Ваш вопрос: пользователь, вводящий данные, вероятно, не делает (и не был должен) знать что-либо о том, что "пустой указатель" и как это выдерживает сравнение с "пустым". Этот вопрос должен быть решен чисто и последовательно в системе - не UI.

1
ответ дан 8 December 2019 в 05:24
поделиться

У меня никогда не было использования для Нулевого значения в производственном коде. Пустая строка является прекрасным значением сигнальной метки для пустого поля имени, номера телефона или годового дохода для любого приложения. Тем не менее я уверен, что Вы могли найти некоторое использование для него, но я просто думаю, что это злоупотребляется. Если бы я должен был использовать Нулевое значение, однако, я предполагаю, что использовал бы его где угодно, я хочу представить пустое значение.

0
ответ дан 8 December 2019 в 05:24
поделиться

То, что необходимо сделать, выяснить, какое поведение Вы хотите. Нет никакой фиксированной алгебры того, как интерпретируются строки имени.

Думайте о конечном автомате здесь: у Вас есть поля, которые имеют несколько состояний: это slounds как Вы думаете о состоянии "unitialized", другом из "целеустремленно пустого" и одна треть с некоторым установленным значением. ЧТО-ЛИБО, что Вы делаете, который делает то присвоение и согласовывается с остальной частью Вашей программы, будет находкой; это кажется, что легкое отображение

ПУСТОЙ УКАЗАТЕЛЬ → неинициализированный
""→ целеустремленно сброс
имя → инициализированный.

5
ответ дан 8 December 2019 в 05:24
поделиться
Другие вопросы по тегам:

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