PHP列表明白了吗?第一个变量返回第二个变量的第一个字符
这一定是某种骗局,但我就是看不出来。我已经把它从我的应用程序中取出,并在一个单独的脚本中进行了测试,它的执行方式也是一样的。这里是提取的代码,但它独立地存在相同的问题PHP列表明白了吗?第一个变量返回第二个变量的第一个字符,php,arrays,list,Php,Arrays,List,这一定是某种骗局,但我就是看不出来。我已经把它从我的应用程序中取出,并在一个单独的脚本中进行了测试,它的执行方式也是一样的。这里是提取的代码,但它独立地存在相同的问题 <?php $actions[1] = '14-pictures-of-trees'; var_dump($actions[1]); // 1 $url = explode('-', $actions[1], 2); var_dump($url); // 2 list($id, $url) = $url; var_du
<?php
$actions[1] = '14-pictures-of-trees';
var_dump($actions[1]); // 1
$url = explode('-', $actions[1], 2);
var_dump($url); // 2
list($id, $url) = $url;
var_dump($id); // 3
var_dump($url); // 4
结果如下:
字符串“14棵树的图片”长度=20
排列
0=>字符串“14”长度=2
1=>字符串“树的图片”长度=17
字符串“p”长度=1
字符串“树的图片”长度=17
我期待3返回字符串'14',但它没有 列表指定从最后一个开始到第一个结束的参数。这在中有详细说明,特别是两个警告:
警告
列表指定从最右边的参数开始的值。如果您使用的是普通变量,则不必担心这一点。但是,如果使用带有索引的数组,通常期望数组中的索引顺序与您在列表中编写的顺序相同,从左到右;但事实并非如此。它是按相反的顺序分配的
警告
在列表执行期间修改数组,例如使用列表$a,$b=$b会导致未定义的行为
因此,你的表达基本上是这样的:
$url = $url[1]; // $url is now "pictures-of-trees"
$id = $url[0];
像访问字符数组一样访问字符串,$id现在是$url的第一个字符。因此p
相反,请为$url使用不同的变量名或直接分配它们:
list($id, $url) = explode('-', $actions[1], 2);
列表指定从最后一个开始到第一个结束的参数。这在中有详细说明,特别是两个警告:
警告
列表指定从最右边的参数开始的值。如果您使用的是普通变量,则不必担心这一点。但是,如果使用带有索引的数组,通常期望数组中的索引顺序与您在列表中编写的顺序相同,从左到右;但事实并非如此。它是按相反的顺序分配的
警告
在列表执行期间修改数组,例如使用列表$a,$b=$b会导致未定义的行为
因此,你的表达基本上是这样的:
$url = $url[1]; // $url is now "pictures-of-trees"
$id = $url[0];
像访问字符数组一样访问字符串,$id现在是$url的第一个字符。因此p
相反,请为$url使用不同的变量名或直接分配它们:
list($id, $url) = explode('-', $actions[1], 2);
发生的情况是,在分配$id之前,变量$url被修改并被前一个数组$url的第二个元素覆盖。这是因为列表从右向左加载变量,而不是从左向右加载 当您在列表调用中将$url[0]转换为字符串后访问它时,您将获得第一个字符p,这将存储在$id中
有关从右到左分配的信息,请参见…在分配$id之前,变量$url被修改并被前一个数组$url的第二个元素覆盖。这是因为列表从右向左加载变量,而不是从左向右加载 当您在列表调用中将$url[0]转换为字符串后访问它时,您将获得第一个字符p,这将存储在$id中 有关从右向左分配的信息,请参见…列表在创建$id之前覆盖$url变量 从手册中: 在列表执行期间修改数组,例如使用列表$a, $b=$b导致未定义的行为 在左侧使用不同的变量可以解决此问题:
list($id, $urx) = $url;
列表在创建$id之前覆盖$url变量
从手册中:
在列表执行期间修改数组,例如使用列表$a,
$b=$b导致未定义的行为
在左侧使用不同的变量可以解决此问题:
list($id, $urx) = $url;
这是因为您正在分配变量$url,而列表构造正在使用它。如果更改变量名,将得到预期的结果。请记住,列表以从右到左的方式分配值
<?php
$actions[1] = '14-pictures-of-trees';
$url = explode('-', $actions[1], 2);
var_dump($url); // 2
list($id, $url2) = $url;
var_dump($id); // 3
var_dump($url2); // 4
?>
这是因为您正在分配变量$url,而列表构造正在使用它。如果更改变量名,将得到预期的结果。请记住,列表以从右到左的方式分配值
<?php
$actions[1] = '14-pictures-of-trees';
$url = explode('-', $actions[1], 2);
var_dump($url); // 2
list($id, $url2) = $url;
var_dump($id); // 3
var_dump($url2); // 4
?>
问题在于这句话
list($id, $url) = $url;
处理数组时正在修改它。问题在于语句
list($id, $url) = $url;
处理数组时正在修改它。或列出$id、$url=explode'-',$actions[1],2;或列出$id、$url=explode'-',$actions[1],2;