当我遍历数组时,如何获取当前元素编号?
我知道count(),但我希望有一个内置函数来获取当前字段索引,而不必添加额外的计数器变量.
像这样:
foreach($array as $key => value)
if(index($key) == count($array) ....
Run Code Online (Sandbox Code Playgroud) 我意识到对这个问题的下意识反应是"你不要.",但是听我说.
基本上我在SQL上的活动记录系统上运行,并且为了防止同一数据库行的重复对象,我在工厂中为每个当前加载的对象保留一个"数组"(使用自动增量'id'作为键).
问题是,当我尝试在奇怪的场合通过这个系统处理90,000多行时,PHP会遇到内存问题.这很容易通过每隔几百行运行一次垃圾收集来解决,但不幸的是,由于工厂存储了每个对象的副本 - PHP的垃圾收集不会释放任何这些节点.
我能想到的唯一解决方案是检查存储在工厂中的对象的引用计数是否等于1(即没有引用该类),如果是这样,则释放它们.这可以解决我的问题,但PHP没有引用计数方法?(除了debug_zval_dump,但那几乎不可用).
我正在尝试使用
"value1:value2::value3".split(":");
Run Code Online (Sandbox Code Playgroud)
问题是我希望它包含空白结果.
它返回:[value1, value2, value3]
它应该是:[value1, value2, , value3]
有谁知道regexp来解决这个问题?
好的,我找到了问题原因.我实际上正在阅读一个文本文件,它包含以下行:
123:;~\&:ST02:M:test:M:4540145::type;12:51253:D:2.2:567766::AL:::::::2.2b
Run Code Online (Sandbox Code Playgroud)
当我处理这一行读取文本文件时,它会产生上面提到的错误结果,在这种情况下它不包含任何空结果::::::.
但是当我在测试程序中使用上面的行时,它不会编译,我得到一个"无效的转义序列".我认为这是因为"\&".
使用正则表达式是否有解决此问题的方法?
我有一个最奇怪的错误......我正在尝试使用display:table,我的概念验证在打开一个新进程后的第一次尝试中起作用,但任何后续的页面重新加载都会破坏设计.这是简单的HTML页面:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Untitled Page</title>
<style>
.container {
display: table;
}
.row {
display: table-row;
}
.cell {
display: table-cell;
width: 100px;
height: 100px;
border: 1px solid blue;
padding: 1em;
}
</style>
</head>
<body>
<div class="container">
<div class="row">
<div class="cell">CELL A</div>
<div class="cell">CELL B</div>
<div class="cell">CELL C</div>
</div>
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
这是预期的结果,这是我第一次加载后得到的结果.

现在这是我重新加载页面后得到的,用F5:

这太疯狂了!
有人可以试一试,让我知道它是如何产生的吗?谢谢.我希望在我阅读解决方案时我不会自杀!-)
我已经在解决一个问题,但是在我想要检查实现之前的想法之前,我还没有做过这样的事情.
基本上我需要修改一个现有的基于Web的应用程序,该应用程序有大约20个用户来添加推送通知.用户同时获取通知非常重要(PC-A不应在PC-B之前20秒收到警报).目前,系统处理AJAX请求,每隔20秒发送到服务器并请求任何更新并每次完全重建数据表(即使数据未更改).这看起来真的很草率,所以我提出了两种方法.
不要断开与服务器客户端的连接.我正在抛弃的这个想法涉及保持服务器和客户端之间的连接始终处于活动状态.带宽并不是任何解决方案的真正问题,因为内部网络只有大约20人.使用此解决方案,只要有更新,服务器就可以将Javascript推送到客户端,并相应地修改数据表.同样,每个连接的PC在尽可能接近的同时接收更新是非常重要的.这个的主要缺点是我的经验,我以前从未这样做过,所以我不确定它的效果如何,或者它通常是一个坏主意.
继续AJAX请求,但只是间隔响应.我想到的第二个解决方案是允许客户端按照惯例(当前每20秒)发出AJAX请求,但服务器只能以30秒的间隔响应(例如2:00:00和2:00:30)无论在那段时间内收到多少AJAX请求.这需要调整AJAX请求的超时以防止请求超时,但理论上听起来没问题,至少对我而言.
这仅适用于内部网络,因此带宽不是主要考虑因素,因此通知尽可能接近彼此接收.我对其他想法持开放态度,这些只是我到目前为止所想到的两个想法.
主要寻找每种方法的利弊.DashK有另一个有趣的方法,但我想知道是否有人有任何这些方法的经验,并可以证明每种方法的优点和缺点,或可能是另一种方法.
我想创建一个可以通过浏览设备类型访问的网站,当用户访问不同设备(iPad,iPhone,上网本,PC)上的网站时,他们会立即看到为他们优化的网站版本,而不必去到m.example.com.我知道您可以指定html进行打印等.是否有类型的设备尺寸和类型(多点触控与基于鼠标)?
来自MSDN:
参数sourceArray
包含要复制的数据的Array.destinationArray
接收数据的Array.长度
一个64位整数,表示要复制的元素数.整数必须介于0和Int32.MaxValue之间(包括0和Int32.MaxValue)
鉴于值的允许范围是0对Int32.MaxValue,什么是添加此签名的动机是什么?它在.Net 1.0中不存在,只在.Net 1.1中添加.我唯一的猜测是准备64位框架实现.
在下面的代码中,prod的值不是9,000,000; 它获得了垃圾值.为什么我们需要num1和num2为long类型?
#include <stdio.h>
int main()
{
int num1 = 3000, num2 = 3000;
long int prod = num1 * num2;
printf("%ld\n", prod);
return 0;
}
Run Code Online (Sandbox Code Playgroud)