PHP关于print_r的一些问题

<?php
$str=array("书籍"=>array("恐怖"=>array("短篇"=>"哈哈","长篇"=>"哈哈哈")),"书籍2"=>array("搞笑"=>array("短篇"=>"哈哈","长篇"=>"哈哈哈")));
$test=array("first"=>"1","second"=>"2","third"=>"3");
print_r($str);
echo "";
//print_r("$str"); 为什么这是错误的?
$str1="123";
print_r("$str1"); //为什么这个是正确的?

?>
还有就是能不能顺便解答下这个“”何时该加 都快懵逼了

而且在输出单个数组的时候如 echo $test["one"]是对的 而echo $test[one]是错误的 还有就是echo 后面放东西的时候什么时候加双引号什么时候不加 求大神解释

双引号可以解析变量,但是不能解析数组,所以print_r("$str1")会等于123,因为他把变量解析了,但是是数组的时候就会报错;$test是个数组,里面的键名必须加引号,如果键名是变量可以不用加引号。

var_dump() 能打印出类型 数组键名是数字和变量可以不加引号,其他需要加。

print的时候原因是双引号可以解析字符串的变量,但是不能解析数组。echo的时候是因为写法问题,数组读取的时候数字数组可以不加引号,但是关联数组的读取要加引号,单引号和双引号都可以的。

打印的时候建议使用var_dump() 此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。

首先$array[]是数组,而数组分为索引、关联、多维,而索引就是 $array[0~9] 就是数字,并不需要引号,而关联数组是你自己分配键名给数组可以是$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43"); 而这样键名就要加上引号,个人建议你去多看一下w3school,不要立即上手,慢慢来,把方法
摸透了再一步一步来