$items = (isset($_POST['items'])) ? $_POST['items'] : array();
我不明白这段代码的最后一段“? $_POST['items'] : array();
”
这些代码组合究竟做了什么?
我使用它从html文本框中获取一堆值并将其存储到会话数组中。但问题是,如果我尝试在文本框中重新提交数据,新的数组会话将完全覆盖旧会话数组空白和所有空格。
我只想覆盖已经有值的数组中的位置。如果用户决定只填写几个文本框,我不希望先前的会话数组数据被空格覆盖(来自空白文本框)。
我认为上面的代码是问题,但我不确定它是如何工作的。请赐教。
答案 0 :(得分:41)
这是 a ternary operator:
如果(expr1) ? (expr2) : (expr3)
评估为expr2
,则expr1
表达式评估为TRUE
;如果expr3
评估为expr1
,则表达式FALSE
。
答案 1 :(得分:17)
最后一部分称为条件运算符。基本上它是一个浓缩的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文档将此运算符称为三元运算符。虽然条件运算符在技术上是三元运算符(即具有3个操作数的运算符),但将其称为 三元运算符是一种误称(而非推定)。 / p>
答案 2 :(得分:2)
看看保罗的理解三元运算符的答案。
要做你正在做的事情,你可能想要使用会话变量。
在页面顶部放置此内容(因为在开始会话之前无法向页面输出任何内容.I。E。NO ECHO语句)
session_start();
然后,当用户提交表单时,将结果保存在此服务器变量中。如果这是用户第一次提交表单,只需直接保存,否则循环并添加任何非空的值。看看这是否是您正在寻找的:
HTML CODE(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>';
}
?>
答案 3 :(得分:1)
与以下内容相同:
if (isset($_POST['items']){
$items = $_POST['items'];
} else {
$items = array();
}
答案 4 :(得分:0)
基本上如果$ _POST ['items']存在,那么$ items设置为它,否则它被设置为一个空数组。
答案 5 :(得分:0)
这是一个三元运算符,基本上说如果items键在$ _POST中,那么将$ items设置为等于$ _POST ['items'的值],否则将其设置为空数组。
答案 6 :(得分:0)
我认为值得注意的是?:
是一个单独的运算符,其中:
$one = $two ?: $three;
$one = two() ?: three();
是:
的简写$one = $two ? $two : $three;
$one = two() ? two() : three();
除了输入less之外,运行时的优势在于,如果使用类似two()
的函数,该函数只能使用缩写形式计算一次,但可能只使用long形式计算两次。
答案 7 :(得分:0)
是的......这是三元运营商
提供了一个简单明了的解释here,其中作者说它就像回答:“嗯,这是真的吗?”
冒号 分隔两个可能的值(或)。如果测试表达式为真,则将选择第一个值。如果第一个答案是假的话,将选择第二个(冒号后面)。
三元运算符在php 7.x中创建变量非常有帮助,没有通知警告。例如&#34;
$mod = isset($_REQUEST['mod']) ? $_REQUEST['mod'] : "";