2015-01-16 3 views
-1

Я беру данные из Excel с помощью PHPExcel, как это:StrPos возвращает истину при использовании различных строк ясно

$number = $objPHPExcel->getActiveSheet()->getCell('A3')->getValue(); 

номер явно номер, хорошо? так, после того, что я хочу знать, если $ число существует на слово $ эля:

if(strpos($elem,$number) !== false) //está? 
       { 
        $answer = true; 
       } 

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

$number = 11001456 
$elem = '10001033.jpg' 

Итак ... что здесь не так?


PD: Я собираюсь отправить весь код, так что вы можете увидеть, если я пытаюсь сделать (строка) $ число, то происходит сбой кода, он превышает время выполнения .... (с помощью CakePHP)

важно находится в функции SearchPhoto ... вы увидите StrPos там ...

public function admin_load() //esto sirve para cargar un excel... 
    { 

     if($this->request->is('post')) 
     { 
      $data = $this->request->data; 

      error_reporting(E_ALL); 
      ini_set('display_errors', TRUE); 
      ini_set('display_startup_errors', TRUE); 

      define('EOL',(PHP_SAPI == 'cli') ? PHP_EOL : '<br />'); 

      date_default_timezone_set('Europe/London'); 

      /** Include PHPExcel_IOFactory */ 
      require_once WWW_ROOT . '/excelWorker/Classes/PHPExcel/IOFactory.php'; 

      echo date('H:i:s') , " Load from Excel2007 file" , EOL; 
      $callStartTime = microtime(true); 

      $objPHPExcel = PHPExcel_IOFactory::load($data['People']['excel']['tmp_name']); 

      $dir = WWW_ROOT . "img/photos"; 
      $files = scandir($dir); 

      $batchPeople = array(); 

      for($i = 2; $i <= $data['People']['num']; $i++) 
      { 
       $batchPeople[$i-2]['People']['fullname'] = $objPHPExcel->getActiveSheet()->getCell('B'.$i)->getValue(); 
       $batchPeople[$i-2]['People']['floor'] = $objPHPExcel->getActiveSheet()->getCell('C'.$i)->getValue(); 
       $batchPeople[$i-2]['People']['country'] = $objPHPExcel->getActiveSheet()->getCell('D'.$i)->getValue(); 
       $batchPeople[$i-2]['People']['day'] = $objPHPExcel->getActiveSheet()->getCell('F'.$i)->getValue(); 
       $batchPeople[$i-2]['People']['month'] = $objPHPExcel->getActiveSheet()->getCell('G'.$i)->getValue(); 
       $batchPeople[$i-2]['People']['photo'] = $this->SearchPhoto($objPHPExcel->getActiveSheet()->getCell('A'.$i)->getValue(),$files); 
      } 

    //  $this->People->saveMany($batchPeople); 

     } 

    } 

    function SearchPhoto($number, $array) 
    { 
     $answer = ''; 
     $getOut = false; 

    foreach($array as $elem) 
    { 
     if(strcmp($elem,'.') != 0 && strcmp($elem,'..') != 0) 
      if(strpos($elem,$number) !== false) //está? 
      { 
       echo 'coinciden--> '. $number . ',' . $elem; 
       echo '<br>'; 
       $answer = $elem; 
       $getOut = true; 
      } 
      if($getOut) 
       break; 
    } 

    return $answer; 
} 
+0

Ваш код использует '$ number', не' $ num'. – Barmar

+0

У вас нет предложения 'else'. Так что если '$ answer' был' true' перед оператором 'if', это будет по-прежнему истинным после. – Barmar

ответ

0

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

В случае, если кто интересно, что точное решение:

$text = $B; 
$pattern = '/'.$A.'/'; 

preg_match($pattern,$text,$matches); 

if(isset($matches[0])) 
    $answer = true; 
1

Это должно работать для вас:

(BTW: вы используете $number в треска е и не $num)

<?php 


    $num = 11001456; 
    $elem = "10001033.jpg"; 

    if(strpos($elem, (string)$num) !== false) { 
     echo "yes"; 
    } 

?> 

Для получения дополнительной информации о strpos() смотрите в руководстве: http://php.net/manual/en/function.strpos.php

И цитата оттуда:

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

echo chr($number);  // p 
echo strpos($elem, 'p'); // 10 (which is p in $elem) 
+0

Я использую cakephp, и используя (string), он превышает время выполнения ... – WhiteFloater

+0

@WhiteFloater Вы протестировали код с предоставленными тестовыми данными? ('$ num = 11001456; $ elem =" 10001033.jpg ";') – Rizier123

+0

, конечно, это пример данных, возвращающих true, и это не должно ... – WhiteFloater