Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP字符串偏移量?在执行许多substr时使用变量(如缓冲区)太慢?_Php_Pointers_Substr - Fatal编程技术网

PHP字符串偏移量?在执行许多substr时使用变量(如缓冲区)太慢?

PHP字符串偏移量?在执行许多substr时使用变量(如缓冲区)太慢?,php,pointers,substr,Php,Pointers,Substr,我有一个需要PHP解释的缓冲区,但是在缓冲区上使用许多substr被证明是非常缓慢和cpu密集的,可能是因为substr创建了子字符串的新副本 我需要通过以下方式在缓冲区中前进: 移动偏移量为X(可变字节数)。 或 从开头删除X字节 PHP中是否有允许我执行类似操作的容器 示例(伪代码) 谢谢在字节级别工作并不是创建PHP的目的。PHP如何管理内存比您想象的要复杂得多。它使用了大量的参考资料,即使您不使用&也很少复制 我非常怀疑执行许多substr的速度会很慢,我也非常怀疑用PHP在字节级管理内

我有一个需要PHP解释的缓冲区,但是在缓冲区上使用许多substr被证明是非常缓慢和cpu密集的,可能是因为substr创建了子字符串的新副本

我需要通过以下方式在缓冲区中前进:

移动偏移量为X(可变字节数)。 或 从开头删除X字节

PHP中是否有允许我执行类似操作的容器

示例(伪代码)


谢谢

在字节级别工作并不是创建PHP的目的。PHP如何管理内存比您想象的要复杂得多。它使用了大量的参考资料,即使您不使用
&
也很少复制


我非常怀疑执行许多
substr
的速度会很慢,我也非常怀疑用PHP在字节级管理内存会有什么帮助。

而(!done)
给出语法错误。@Jeffery-and
unpack(?
也是无效的。我很确定它只是伪代码。是的,这是正确的,我应该指定这只是一个伪代码示例。如果它可以加载到内存中,或者临时文件足够快,您可以尝试使用
fread
php://memory或
php://temp
streams。不确定是否更快,但麦汁尝试一下。我会研究这个建议,我也考虑过数组,但发现:PHP使用哈希表来实现数组,也就是说,为了访问数组中的元素,它必须计算一个哈希并遍历一个链表,最坏的情况下,我可以从PHP调用C代码,但我将把它作为最后的手段。我们在代码和substr的速度确实非常慢,下面是另一个有类似问题的人:
while( !done )
{
   $itemSize = unpack( ?, $buffer );
   $item = substr($buffer, $itemSize );
   $done = doSomething( $item );
   $buffer = $item;
}