什么? …:…呢?
$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']:“”;