2015-02-01 3 views
-5

я столкнулся некоторые проблемы с моим кодом, вот пример моего кодаPHP: не in_array работать с пустым массивом

$arr2=array(); 
$element1="2015-01-13"; 

if(!in_array($element1,$arr2)) { 
     array_push($arr2,$element1); 
} 

var_dump($arr2); 

выводом является пустым массивом

array(0) { 
} 

если массив уже имеет элемент (добавлен вручную), скажем, 2015-01-12, затем 2015-03-13 был успешно вставлен путем нажатия массива.

Что происходит, когда массив пуст и чекает с помощью in_array.?

Вот исходный код

$arr2 = array();     // ARRAY UNIQUE PROCESS TO PREDATES 

     foreach($predates as $element1) 
      { 
       foreach($predates as $element2) 
        { 

         if ($element1 != $element2 && !in_array($element1,$arr2)) 
          { 
           array_push($arr2,$element1); 
                    echo "enter"; 
          } 
        } 
      } 

Любая помощь будет принята с благодарностью.

+2

Был ли этот код вставлен правильно? Это дает мне ошибку синтаксического анализа, потому что в начале элемента «element1» нет знака доллара. Фактически, когда я исправляю эту ошибку, она работает для меня. Я получаю 'array (1) {[0] => string (10)" 2015-01-13 "}'. – cesoid

+1

И когда я добавляю отсутствующий '$' in, он печатает массив с правильным значением в нем. – andrewsi

+0

Вызывается ли array_push Можете ли вы поместить эхо «hi» внутри if(), чтобы увидеть, что это in_array или array_push, что не удается? – satchcoder

ответ

1

Здравствуйте я рад помочь вам,

, что происходит здесь, представляет собой комбинацию из 2-х факторов ...

  1. вам не хватает $ на ваш $element переменной
  2. вы не все сообщения об ошибках активируются, поэтому уведомление не отображается на экране, или вы используете фреймворк, который модифицирует error_reporting, чтобы уведомление было пропущено.

я настоятельно рекомендую вам всегда выглядеть на /var/log/httpd/error_log для отладки коды и использовать error_reporting = E_ALL для отладки задачи, приветов

+0

Я уже сказал, что это пример кода в моем вопросе, проблема не в $ знак, в любом случае спасибо за ваш ответ. пожалуйста, не голосуйте за этот квест, я начинаю с php –

+0

@ShifanaMubi, пожалуйста, объясните, что вы пытаетесь выполнить с новым кодом, который вы опубликовали, потому что я сделал свой тест, и он работает ... я буду рад помочь вам – DiegoCoderPlus

+0

Спасибо DiegoCoderPlus за вашу доброту, я получил свой результат :) –

0

Извините за мои все ошибки, в конце концов я основал эту проблему и решить ее.

Проблема здесь:

if ($element1 != $element2 && !in_array($element1,$arr2)) 

, если даты совпадают, то element1 и element2 такое же, и я использовал & & оператор inside.so не войдет в цикл. но & & является обязательным, потому что, если все даты отличаются друг от друга, все они вставляются в массив более одного.

Решение:

if (count(array_unique($predates))===1) { 
           array_push($arr2,$predates[1]); 
         } 

этот цикл будет проверять все элементы массива одинаковы, а затем вставьте 1-ый элемент и if ($element1 != $element2 && !in_array($element1,$arr2)) все еще там, я получил свой выход.

plese downvote этот ответ, это мой любезный запрос