我有一个非常奇怪的问题.我正在运行foreach循环来编译数组,但是我收到一个错误.
我发现以下警告:
警告:非法字符串偏移'clientaccount_id'
对于这行代码:
$this->PreparedData[$table][$field] = 0;
Run Code Online (Sandbox Code Playgroud)
如果我做的话,我会说这是逻辑:
$ testVariable = $ this-> PreparedData [$ table] [$ field];
然后填充'clientaccount_id'的变量$字段将不存在.但我正在创建字段'clientaccount_id'所以对我来说这几乎不可能出错.
代码
private function AssignData(){
foreach($this->FieldKeys as $table => $value){
///######## IF THE PREPARED DATA ARRAY DOES NOT EXIST
if(isset($this->PreparedData[$table]) === false){
///######## SET THE ARRAY KEY
$this->PreparedData[$table] = array();
}
///######## RUN THROUGH ALL SET SUB DATA
foreach($value as $field){
///######## IF THE FIELD EXISTS
if(isset($this->AccountData[$field]) === true){
///######## ASSIGN THE DATA
///$this->PreparedData[$table][$field] = $this->AccountData[$field];
///$this->PreparedData[$field] = $this->AccountData[$field];
$this->PreparedData[$table][$field] = 0;
}
}
}
exit('GOT THROUGH!!');
}
Run Code Online (Sandbox Code Playgroud)
谁能看到我忽略的错误?
解决了!!
感谢VMcreator
改变了:
Run Code Online (Sandbox Code Playgroud)isset($this->PreparedData[$table]) === false对此:
Run Code Online (Sandbox Code Playgroud)is_array($this->PreparedData[$table]) === false请阅读下面的说明为什么
VMc*_*tor 10
尝试更改此行:
isset($this->PreparedData[$table]) === false
Run Code Online (Sandbox Code Playgroud)
对此:
!is_array($this->PreparedData[$table])
Run Code Online (Sandbox Code Playgroud)
我在这里看到了这个解释:
它只是归结为PHP的疯狂类型系统.
$ fruits ['response'] ['errormessage']是字符串'banana',所以你试图通过['orange']索引访问该字符串中的字符.
为了索引,字符串'orange'被转换为整数,因此它变为0,如$ fruits ['response'] ['errormessage'] [0].字符串的第0个索引是字符串的第一个字符,因此对于非空字符串,它基本上是设置的.因此isset()返回true.
你可能很好奇为什么你的情况与引用的语句相当,即使$ this-> PreparedData [$ table]只是一个单维数组,而且它不仅仅是一个单维数组,因为你正在访问一个类对象,它只是喜欢这个$ this ["PreparedData"] [$ table].