不在SUBSTR中返回PHP中的值

时间:2012-04-01 03:30:48

标签: php wordpress substr strpos

任何人都知道为什么这不会返回值?

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 :(得分:0)

我相信你在这里尝试做的最好的方法是正则表达式。

对于您的具体任务,应该这样做:

$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);
}

如果您想知道找到了哪个号码,请使用$ fields [1]。

祝你好运

答案 1 :(得分:0)

唯一的原因,这可能发生,如果$ pos中没有足够的字符,substr返回false或“”。如果$ pos中包含“UPC”或“ISBN”,你确定$ pos包含足够的字符吗?