Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP列表明白了吗?第一个变量返回第二个变量的第一个字符_Php_Arrays_List - Fatal编程技术网

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;