使用explode()后无法设置值

时间:2017-06-13 19:15:46

标签: php arrays foreach delimiter explode

我无法在变量$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;

1 个答案:

答案 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";