如何遍历$ _SESSION并从数组中打印值

时间:2017-08-25 07:30:51

标签: php arrays session

我创建了三个文件,其中一个我想在一个Section上循环输出我的数组中的名称和价格

 <?php
 session_start();
 ?>
<?php 
  $a=array(
      array('id'=>'1','name'=>'Milch','price'=>'12'),
      array('id'=>'2','name'=>'Reis','price'=>'13'),
      array('id'=>'3','name'=> 'Öl', 'price'=>'14'),
      array('id'=>'4','name'=>'Salz','price'=>'15'),
      array('id'=>'5','name'=>'Zucker','price'=>'16'),      
        );       
if(empty($_SESSION['warenkorb'])){       
   echo 'Warenkorb leer';
   }           
else {                          
   foreach($_SESSION['warenkorb'] as $key=>$value){ 
   $_SESSION['warenkorb']=array();            
   print_r($value['name'].': '.'$'.$value['price'].PHP_EOL.'<br />');
     }
   }                                      
  ?>

这是另一个带有课程的文件,我只从id

输出
<?php
session_start();
?>
 ?php         
     include 'produkte.php';           
     if(!isset($_SESSION['warenkorb'])){  
       $_SESSION['warenkorb']=array();
         }                                
        if(isset($_POST['id'])){             
        foreach($a as $key =>$value){  
        if($value['id']==$_POST['id']){                     
           $_SESSION['warenkorb'][]= $_POST['id'];              
          }              
         }
        }     
        print_r(count($_SESSION['warenkorb']));          
   ?>

3 个答案:

答案 0 :(得分:2)

只需使用
firewall-cmd --zone=public --add-port=5666/tcp Error: COMMAND_FAILED: '/sbin/iptables -w2 -A IN_public_allow -t filter -m tcp -p tcp --dport 5666 -m conntrack --ctstate NEW -j ACCEPT' failed: iptables: No chain/target/match by that name. Failed to apply rules. A firewall reload might solve the issue if the firewall has been modified using ip*tables or ebtables.
echo "<pre>"
打印print_r($_SESSION)变量中的所有键值。

答案 1 :(得分:2)

我不确定我的解释是否正确,我尝试了对你问题标题的最直接的解释

var firstname;
var lastname;
var height;

firstname = prompt("Please enter first name of player 1", "");
if (firstname != null && firstname != "") {
  document.writeln("<td>" + firstname + "</td>");
} else {
  document.writeln(firstname = "First name not supplied");
}

lastname = prompt("Please enter Last name of player 1", "");
if (lastname != null && lastname != "") {
  document.writeln("<td>" + lastname + "</td>");
} else {
  document.writeln(lastname = "Last name not supplied");
}

height = prompt("Please enter height of player 1", "");
if (height != null && height != "") {
  document.writeln("<td>" + height + "</td>");
} else {
  document.writeln(height = "Height not supplied");
}

您现在拥有一个名为<?php $a = array( array('id'=>'1','name'=>'Milch','price'=>'12'), array('id'=>'2','name'=>'Reis','price'=>'13'), array('id'=>'3','name'=> 'Öl', 'price'=>'14'), array('id'=>'4','name'=>'Salz','price'=>'15'), array('id'=>'5','name'=>'Zucker','price'=>'16'), ); 的数组,其中包含您的所有名称和价格。

$a

您在if (empty($_SESSION['warenkorb'])) { echo 'Warenkorb leer'; } else { foreach ($_SESSION['warenkorb'] as $key => $value) { 上进行迭代。使用$_SESSION['warenkorb']中另一个条目的键和值设置每次迭代,$key$value

$_SESSION['warenkorb']

然而,您的代码在第一次循环期间执行的第一件事是将 $_SESSION['warenkorb'] = array(); 重置为空数组。

$_SESSION['warenkorb']

由于您重置了正在迭代的相同数组,因此该行将永远不会再次执行,第一次也是最后一次。然而,它仍然无效,因为您尝试打印的条目位于 print_r($value['name'].': '.'$'.$value['price'].PHP_EOL.'<br />');

$a

试试这个:

    }
}
?>

答案 2 :(得分:1)

在第一段代码中,您需要更改 else 部分中的一些内容: -

else {                          
    foreach($_SESSION['warenkorb'] as $key=>$value){  //iterate over SESSION array
        foreach($a as $v){ //iterate over $a array
            if($value == $v['id']){ //compare SESSION is with $a sub-array id         
                echo $v['name'].': '.'$'.$v['price'].'<br />'; // if match then echo name and price from sub-array
            }
        }
    }
}