2D专用数组的PHP未定义索引
我已经在这个问题上纠缠了一段时间,不确定问题出在哪里 也许这里有人有很好的洞察力 这是“代码”:2D专用数组的PHP未定义索引,php,arrays,pthreads,private,Php,Arrays,Pthreads,Private,我已经在这个问题上纠缠了一段时间,不确定问题出在哪里 也许这里有人有很好的洞察力 这是“代码”: class File extends Stackable{ private $data; function set_data($array){ foreach($array as $row => $data) foreach($data as $col => $val) $this->data[
class File extends Stackable{
private $data;
function set_data($array){
foreach($array as $row => $data)
foreach($data as $col => $val)
$this->data[$row][$col]=$val;
echo $this->data[$row][$col];
}
}
其中指出在echo
上有一个未定义的索引:$col
,其中$col
通常是一个字母
$row
可以假定已设置
可能我没有提供足够的详细信息,可能还有其他依赖项,如果是,请让我知道
值得注意的是,这里使用了php pthreads,尽管我不认为这是原因,因为错误仍然发生在1个线程上
提前感谢您的帮助。在您的第二封邮件中
必须将代码置于{}之间,如:
foreach($data as $col => $val){
$this->data[$row][$col]=$val;
echo $this->data[$row][$col];
}
在echo$this->data[$row][$col]没有定义$col和$val的code>超出范围。成员“data”只是一个普通数组,由于pthreads对象的工作方式,您正在丢失维度;您不想使用成员“数据”,不需要:
<?php
class File extends Stackable {
/* in pthreads you are responsible for the objects you create */
/* so we accept an array by reference to store dimensions */
public function set_data($array, &$files){
foreach($array as $row => $data) {
foreach($data as $col => $val) {
/* force this vector into existence */
if (!isset($this[$row])) {
$this[$row] = $files[] = new File();
}
$this[$row][$col]=$val;
}
}
}
public function run() {}
}
$files = array();
$f = new File();
$f->set_data(array("test" => array($_SERVER)), $files);
var_dump($f);
?>
您应该记住,pthreads对象需要处理安全开销,因此尽可能少地循环它们的成员。在理想情况下,setData的$array已经是合适的类型了……var\u dump($array)的输出是什么代码>就在函数的开头?为什么这样做?您试图以一种非常奇怪的方式实现$this->data=$array
fashion@TheWolfvar_dump只输出之前输入到数组中的当前值,这里是2x20array@AlmaDoMundo,这项具体实施是否会对结果产生影响?如果是这样的话,你能澄清一下吗?@Victor.dMdB你在数组中迭代,只是为了用相同的键和值填充数据。所以我不明白为什么要这样做,如果你能直接分配数组hi@Morteza,谢谢你的提示,虽然我最初尝试过,希望它能改变一些东西,尽管不幸的是它没有改变,你能在循环结束后打印$this->数据,函数结束后退出,因此,你可以发现$this->数据是否为空,如果不是,那么你可以使用键进行测试。感谢您的澄清,我认为是pthreads中的负责你创建的对象,这是我第一次误解的。我重新编码,只使用添加到池中的1维数组,而不是共享的ressource,现在一切正常(除了我仍在努力解决的其他方面,即导入的包似乎不是线程安全的)