【问题标题】:PHP - Invalid argument supplied for foreach() warning messagePHP - 为 foreach() 警告消息提供的参数无效
【发布时间】:2016-08-18 05:48:49
【问题描述】:
$data = file_get_contents($file);

$fexplode = explode(PHP_EOL, $data);

foreach ($fexplode as $uline) {
     foreach (unserialize($uline) as $item => $value){ 
         echo $item . " :  ";
         echo $value;
     }
} 

运行此代码时在我的页面上收到“警告:为 foreach() 提供的参数无效”警告

【问题讨论】:

  • 你试过 print_r($fexplode) 吗?它是在打印一个数组吗?
  • @VikrantVirBhalla 当我使用 print_r($fexplode);它给了我这个数组( [0] => a:3:{s:8:"Player 1";s:7:"Scissor";s:8:"Player 2";s:6:"Lizard"; s:7:"结果";s:36:"Scissor 击败蜥蜴。玩家 1 获胜!";} [1] => a:3:{s:8:"玩家 1";s:6:"蜥蜴" ;s:8:"玩家 2";s:5:"Spock";s:7:"结果";s:34:"蜥蜴击败 Spock。玩家 1 获胜!";} [2] => a:3 :{s:8:"玩家 1";s:4:"摇滚";s:8:"玩家 2";s:4:"摇滚";s:7:"结果";s:5:"抽奖!";} 看来反序列化不是反序列化所有数据,而是反序列化部分数据?
  • @VikrantVirBhalla 如果我在反序列化后 print_r 它会给我这个 a:3:{s:8:"Player 1";s:6:"Lizard";s:8:"Player 2"; s:5:"Spock";s:7:"Results";s:34:"Lizard 击败 Spock。玩家 1 获胜!";}

标签: php serialization foreach


【解决方案1】:

以下方式使用

$data = file_get_contents($file);

$fexplode = (!empty($data)?explode(PHP_EOL, $data):array()); // use !empty otherwise make empty array

foreach ($fexplode as $uline) {
     foreach (unserialize($uline) as $item => $value){ 
         echo $item . " :  ";
         echo $value;
     }
} 

【讨论】:

  • 这仍然给了我无效参数警告
  • $data的内容是什么,请使用var_dump($data);并分享
  • a:3:{s:8:"玩家 1";s:7:"剪刀";s:8:"玩家 2";s:6:"蜥蜴";s:7 :"结果";s:36:"Scissor 击败蜥蜴。玩家 1 获胜!";} a:3:{s:8:"玩家 1";s:6:"蜥蜴";s:8:"玩家 2 ";s:5:"Spock";s:7:"结果";s:34:"蜥蜴击败 Spock。玩家 1 获胜!";} a:3:{s:8:"玩家 1";s: 4:"摇滚";s:8:"玩家 2";s:4:"摇滚";s:7:"结果";s:5:"抽奖!";} a:3:{s:8: "Player 1";s:7:"Scissor";s:8:"Player 2";s:6:"Lizard";s:7:"Results";s:36:"Scissor 击败 Lizard。玩家 1 获胜!";}
  • 这是直接从文件中复制出来的,而不是从 var dump 中复制出来的,但是在 var_dump 之后,它基本上是一样的,只是在它前面添加了“string(648)”。
  • 是的,看起来是这样,你尝试使用反序列化
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-14
  • 1970-01-01
  • 1970-01-01
  • 2017-06-01
相关资源
最近更新 更多