什么? …:…呢?

$items = (isset($_POST['items'])) ? $_POST['items'] : array(); 

我不明白这个代码的最后一个片段“ ? $_POST['items'] : array();

这些代码组合究竟做了什么?

我使用它从HTML文本框中获取一堆值,并将其存储到会话数组中。 但问题是,如果我尝试重新提交文本框中的数据,新的数组会话覆盖旧的会话数组完全空白的空间和所有。

我只想覆盖已经有值的数组中的位置。 如果用户决定只填写几个文本框,我不希望先前的会话数组数据被空格(从空白文本框)覆盖。

我想上面的代码是问题,但我不知道它是如何工作的。 请赐教。

这是一个 三元运算符 :

expression式(expr1) ? (expr2) : (expr3) (expr1) ? (expr2) : (expr3)如果expr1值为TRUE(expr1) ? (expr2) : (expr3)值为expr2如果expr1值为TRUE ,则expr3

最后一部分被称为条件运算符 。 基本上它是一个浓缩的if/else语句。

它是这样工作的:

 $items = // if this expression is true (isset($_POST['items'])) // then "$_POST['items']" is assigned to $items ? $_POST['items'] // else "array()" is assigned : array(); 

这里也有一些伪代码可能更简单:

 $items = (condition) ? value_if_condition_true : value_if_condition_false; 

编辑:这是一个快速,迂腐的侧面说明:PHP文档调用这个操作符三元操作符 。 虽然条件操作符在技术上是一个三元操作符(即一个操作符有三个操作符),但把它称为三元操作符是错误的(而不是假定的)。

看保罗的答案,了解三元运算符。

要做你正在做的事情你可能想要使用一个会话variables。

在页面的顶部放置这个(因为在开始会话之前,不能输出任何内容到页面中,IE NO ECHO STATEMENTS)

 session_start(); 

然后,当用户提交表单时,将结果保存在此服务器variables中。 如果这是用户第一次提交表单,直接保存,否则循环并添加任何非空的值。 看看这是你在找什么:

HTML代码(testform.html):

 <html> <body> <form name="someForm" action="process.php" method="POST"> <input name="items[]" type="text"> <input name="items[]" type="text"> <input name="items[]" type="text"> <input type="submit"> </form> </body> </html> 

处理代码(process.php):

 <?php session_start(); if(!$_SESSION['items']) { // If this is the first time the user submitted the form, // set what they put in to the master list which is $_SESSION['items']. $_SESSION['items'] = $_POST['items']; } else { // If the user has submitted items before... // Then we want to replace any fields they changed with the changed value // and leave the blank ones with what they previously gave us. foreach ($_POST['items'] as $key => $value) { if ($value != '') { // So long as the field is not blank $_SESSION['items'][$key] = $value; } } } // Displaying the array. foreach ($_SESSION['items'] as $k => $v) { echo $v,'<br>'; } ?> 

这是一样的:

 if (isset($_POST['items']){ $items = $_POST['items']; } else { $items = array(); } 

基本上,如果$ _POST ['items']存在,那么$ items被设置为它,否则它被设置为一个空数组。

这是一个三元操作符,基本上说,如果items键在$ _POST中,然后设置$ items等于$ _POST ['items']的值,否则将其设置为一个空数组。

我想这也是值得注意的是: ?:是一个独立的操作符,其中:

 $one = $two ?: $three; $one = two() ?: three(); 

简写为:

 $one = $two ? $two : $three; $one = two() ? two() : three(); 

除了input较less之外,运行时的优点是,如果使用像two()的函数,函数只能使用简写forms来计算一次,但也可能使用长forms来计算两次。

是的…这是三元运算符

这里提供了一个简单明了的解释https://www.sitepoint.com/using-the-ternary-operator/ ,作者说这就像回答: “那么,这是真的吗?

冒号 分隔两个可能的值(或)。 如果testingexpression式为真,则将select第一个值。 如果第一个答案是错误的,则select第二个(冒号后面)。

三元运算符在php 7.x中创buildvariables非常有帮助,没有通知警告。 例如”

$ mod = isset($ _ REQUEST ['mod'])? $ _REQUEST ['mod']:“”;