我无法在变量$nombre
,$apellidos
,$genero
,$fecha_nacimiento
,$ruta_obtenida
中设置值,并显示以下错误:
未定义的偏移量:1
未定义的偏移量:2
未定义的偏移量:3
未定义的偏移量: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;
答案 0 :(得分:0)
你的循环(虽然我个人不会在循环中重用size()
变量名)按预期工作。我强烈怀疑你有一个领导或尾随$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
。
代码:(Demo)
list()
输出:
$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";