Не возвращает значение в PHP в SUBSTR - PullRequest
2 голосов
/ 01 апреля 2012

Кто-нибудь знает, почему это не возвращает значение?

Example $item2['data'] where it = UPC
//===================================================//
Author:  Bob Smith  Orig. Published:  December 12, 1980
Format:  Softcover  UPC:  5960605543-04811 Price:  $6.99

//======================================================//
Example $item2['data'] where it = ISBN
//======================================================//
Author:  Jane Smith  Orig. Published:  December 1, 1985
Format:  Hardcover  ISBN #: 978-0-7851-5773-1 Price:  $26.99

//======================================================//
The Code
//======================================================//

$find_stockcode = $item2['data'];

$pos = strpos($find_stockcode, "ISBN");

if ($pos === false) 
{
    $pos = strpos ($find_stockcode, "UPC");
    if($pos === false) 
    {
        $arr = str_split('ABCDEFGHIJKLMNOP0123456789'); 
        shuffle($arr);
        $arr = array_slice($arr, 0, 16); 
        $str = implode('', $arr);
        $stock_num = $str;
    } else  {
          $stock_num = substr($pos, 5, 16);}
} else {
        $stock_num = substr($pos, 8,16); }

$upc = $stock_num;

, если $ find_stockcode возвращает UPC, тогда $ upc должно быть: 5960605543-04811

, если $ find_stockcode возвращает ISBN, тогда $ upcдолжно быть: 978-0-7851-5773-1

если $ find_stockcode не находит UPC или ISBN, тогда $ upc должен быть случайной 16 буквенно-цифровой строкой.

Ответы [ 2 ]

0 голосов
/ 01 апреля 2012

Единственная причина, по которой это может произойти, это если $ pos не содержит достаточно символов и substr возвращает false или "".Вы уверены, что $ pos содержит достаточно символов, если в нем есть «UPC» или «ISBN»?

0 голосов
/ 01 апреля 2012

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

Для вашей конкретной задачи это должно быть сделано:

$number = preg_match("/((UPC)|(ISBN))[^0-9-]+([0-9-]+)/", $input, $fields);

if (count($fields) > 1) {
    $upc = $fields[4];
} else {
    $arr = str_split('ABCDEFGHIJKLMNOP0123456789'); 
    shuffle($arr);
    $arr = array_slice($arr, 0, 16); 
    $upc = implode('', $arr);
}

Если вы хотитечтобы узнать, какой числовой код был найден, используйте поля $ [1].

Удачи

...