我有以下字符串:
CAE33D8E804334D5B490EA273F36830A9849ACDF|xx|yy|46|13896|9550
在下面的代码中对应于
$track_matches[0][0]
。
唯一的恒定长度字段是第一个 (
CAE33D8E804334D5B490EA273F36830A9849ACDF
),其长度为 40 个字符。我试图获取值 xx
和 yy
,它们与列的其余部分一起是未知的长度和值。
所以我正在尝试这样的事情:
$seperator= '|';
$end_seed= strpos($track_matches[0][0], $seperator, 41 );
$seeders[$i] = substr($track_matches[0][0], 41, $end_seed - 41);
$end_leech= strpos($track_matches[0][0], $seperator, $end_seed +1 );
echo "end_seed" . $end_seed . " end_leach: " . $end_leech;
$leechers[$i] = substr($track_matches[0][0], $end_seed +1, $end_leech - $end_seed - 1);
我遇到的问题是
$end_leech=
行似乎无法正常工作(并且无法识别$seperator
)并重新调整整条线($track_matches[0][0]
),因为它在echo
时的值$end_seed 返回正确的值。 ……那么到底是怎么回事,为什么会出现这种情况呢?我该如何修复它?
尝试:
$temp = explode("|", $track_matches[0][0]);
这将返回一个数组,然后您可以将变量引用为
$temp[1]
(xx) 和 $temp[2]
(yy)
尝试:
$myString="CAE33D8E804334D5B490EA273F36830A9849ACDF|xx|yy|46|13896|9550";
$splitString=explode('|',$myString);
$xx=$splitString[1];
$yy=$splitString[2];
当然你可以使用 strpos、substr 等手动复制,但会花费更多精力
因为
explode()
会做太多工作(创建比所需更多的元素),所以 sscanf()
更适合。
防止捕获前 40 个非空白字符,然后捕获接下来的两个非管道子字符串并将其值分配给所需的数组元素。
代码:(演示)
$i = 0;
$matches = 'CAE33D8E804334D5B490EA273F36830A9849ACDF|xx|yy|46|13896|9550';
sscanf($matches, '%*40s|%[^|]|%[^|]', $seeders[$i], $leechers[$i]);
var_dump($seeders[$i], $leechers[$i]);
输出:
string(2) "xx"
string(2) "yy"