使用 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