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]超出范围。

成员“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,现在一切正常(除了我仍在努力解决的其他方面,即导入的包似乎不是线程安全的)