使用 explode() 后无法设置值
Can't set value after using explode()
我无法在变量 $nombre
、$apellidos
、$genero
、$fecha_nacimiento
、$ruta_obtenida
中设置值,并显示这些错误:
Undefined offset: 1
Undefined offset: 2
Undefined offset: 3
Undefined offset: 4
当我用 echo 打印值时,值显示正确,但是当我将它们分配给变量时,它不起作用。为什么会这样?
$nombre = $apellidos = $genero = $clave1 = $clave2 = $fecha = $ruta = "";
$usuarioModel = new perfildatosModelo($_SESSION['el_correo']);
$a_users = $usuarioModel->get_usuario_info($_SESSION['el_correo']);
$count = 0;
$pieces = explode("#", $a_users);
foreach($pieces as $element):
$pieces = explode("|", $element);
$count++;
$nombre=$pieces[1];
$apellidos=$pieces[2];
$genero=$pieces[3];
$fecha_nacimiento=$pieces[4];
$ruta_obtenida=$pieces[0];
endforeach;
你的循环(虽然我个人不会在循环内重复使用 $pieces
变量名)按预期工作。我强烈怀疑您的前导或尾随 #
扰乱了您的流程。 (如果您提供了一些样本输入,我就不必猜测了)看看这个 demonstration:
$a_users='#ro2|no2|ap2|ge2|fn2#';
// A potential problem with exploding on a string with a leading or trailing #
$pieces = explode("#", $a_users); // first element is empty string, second holds values, third is empty string
foreach($pieces as $element){
$pieces = explode("|", $element);
$nombre=$pieces[1];
$apellidos=$pieces[2];
$genero=$pieces[3];
$fecha_nacimiento=$pieces[4];
$ruta_obtenida=$pieces[0];
echo "nombre = $nombre\n";
echo "apellidos = $apellidos\n";
echo "genero = $genero\n";
echo "fecha_nacimiento = $fecha_nacimiento\n";
echo "ruta_obtenida = $ruta_obtenida\n\n";
}
由于前导和尾随 #
,这会抛出两批相同的未定义偏移通知。要解决此问题,您可以使用如下内容:$a_users=trim($a_users,'#');
在 #
.
上爆炸之前
虽然您的方法可以正确处理 #
分隔字符串,但更好/更简洁的方法是完全避免循环并使用 list().
定义变量
如果片段数据有任何不完整的危险,请检查您的 $pieces
字符串是否有足够 pipe
个字符来为您的变量集提供预期数量的值。否则,您可以省略条件并直接移动到 list()
。
代码:(Demo)
$a_users='ro1|no1|ap1|ge1#ro2|no2|ap2|ge2|fn2';
$valid_pieces_count=0;
foreach(explode('#',$a_users) as $pieces){
if(substr_count($pieces,'|')!=4){
echo "Something went wrong, insufficient components in $pieces\n\n";
}else{
list($ruta_obtenida,$nombre,$apellidos,$genero,$fecha_nacimiento)=explode('|',$pieces);
echo "nombre = $nombre\n";
echo "apellidos = $apellidos\n";
echo "genero = $genero\n";
echo "fecha_nacimiento = $fecha_nacimiento\n";
echo "ruta_obtenida = $ruta_obtenida\n\n";
++$valid_pieces_count;
}
}
echo "valid_pieces_count = $valid_pieces_count";
输出:
Something went wrong, insufficient components in ro1|no1|ap1|ge1
nombre = no2
apellidos = ap2
genero = ge2
fecha_nacimiento = fn2
ruta_obtenida = ro2
valid_pieces_count = 1
我无法在变量 $nombre
、$apellidos
、$genero
、$fecha_nacimiento
、$ruta_obtenida
中设置值,并显示这些错误:
Undefined offset: 1
Undefined offset: 2
Undefined offset: 3
Undefined offset: 4
当我用 echo 打印值时,值显示正确,但是当我将它们分配给变量时,它不起作用。为什么会这样?
$nombre = $apellidos = $genero = $clave1 = $clave2 = $fecha = $ruta = "";
$usuarioModel = new perfildatosModelo($_SESSION['el_correo']);
$a_users = $usuarioModel->get_usuario_info($_SESSION['el_correo']);
$count = 0;
$pieces = explode("#", $a_users);
foreach($pieces as $element):
$pieces = explode("|", $element);
$count++;
$nombre=$pieces[1];
$apellidos=$pieces[2];
$genero=$pieces[3];
$fecha_nacimiento=$pieces[4];
$ruta_obtenida=$pieces[0];
endforeach;
你的循环(虽然我个人不会在循环内重复使用 $pieces
变量名)按预期工作。我强烈怀疑您的前导或尾随 #
扰乱了您的流程。 (如果您提供了一些样本输入,我就不必猜测了)看看这个 demonstration:
$a_users='#ro2|no2|ap2|ge2|fn2#';
// A potential problem with exploding on a string with a leading or trailing #
$pieces = explode("#", $a_users); // first element is empty string, second holds values, third is empty string
foreach($pieces as $element){
$pieces = explode("|", $element);
$nombre=$pieces[1];
$apellidos=$pieces[2];
$genero=$pieces[3];
$fecha_nacimiento=$pieces[4];
$ruta_obtenida=$pieces[0];
echo "nombre = $nombre\n";
echo "apellidos = $apellidos\n";
echo "genero = $genero\n";
echo "fecha_nacimiento = $fecha_nacimiento\n";
echo "ruta_obtenida = $ruta_obtenida\n\n";
}
由于前导和尾随 #
,这会抛出两批相同的未定义偏移通知。要解决此问题,您可以使用如下内容:$a_users=trim($a_users,'#');
在 #
.
虽然您的方法可以正确处理 #
分隔字符串,但更好/更简洁的方法是完全避免循环并使用 list().
如果片段数据有任何不完整的危险,请检查您的 $pieces
字符串是否有足够 pipe
个字符来为您的变量集提供预期数量的值。否则,您可以省略条件并直接移动到 list()
。
代码:(Demo)
$a_users='ro1|no1|ap1|ge1#ro2|no2|ap2|ge2|fn2';
$valid_pieces_count=0;
foreach(explode('#',$a_users) as $pieces){
if(substr_count($pieces,'|')!=4){
echo "Something went wrong, insufficient components in $pieces\n\n";
}else{
list($ruta_obtenida,$nombre,$apellidos,$genero,$fecha_nacimiento)=explode('|',$pieces);
echo "nombre = $nombre\n";
echo "apellidos = $apellidos\n";
echo "genero = $genero\n";
echo "fecha_nacimiento = $fecha_nacimiento\n";
echo "ruta_obtenida = $ruta_obtenida\n\n";
++$valid_pieces_count;
}
}
echo "valid_pieces_count = $valid_pieces_count";
输出:
Something went wrong, insufficient components in ro1|no1|ap1|ge1
nombre = no2
apellidos = ap2
genero = ge2
fecha_nacimiento = fn2
ruta_obtenida = ro2
valid_pieces_count = 1