Pergunta

Esta questão já tem uma resposta aqui:

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

Eu não entendo o último trecho deste código "? $_POST['items'] : array();"

O que essa combinação de código faz exatamente?

Eu usá-lo para tomar um monte de valores de caixas de texto HTML e armazená-lo em uma matriz sessão. Mas o problema é, se eu tentar reenviar os dados em caixas de texto a nova sessão variedade substitui o array de sessão antigo completamente espaços em branco e tudo.

Eu só quero lugares Substituir na matriz que já tem valores. Se o usuário decide preencher apenas algumas caixas de texto que eu não quero os dados da matriz sessão anterior para ser substituído por espaços em branco (de caixas de texto em branco).

Eu estou pensando o código acima é o problema, mas não tenho certeza de como ele funciona. Esclareça-me por favor.

Foi útil?

Solução

Esta é a ternário operador :

Os avalia expressão (expr1) ? (expr2) : (expr3) para expr2 se avalia expr1 para TRUE e expr3 se avalia expr1 para FALSE.

Outras dicas

Essa última parte é conhecido como o operador condicional . Basicamente, é uma declaração if/else condensado.

Ele funciona assim:

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

Também aqui é alguns pseudo-código que pode ser mais simples:

$items = (condition) ? value_if_condition_true : value_if_condition_false;

Editar: Aqui está um rápido, pedante nota lateral: A documentação do PHP chama este operador a operador ternário . Enquanto o operador condicional é tecnicamente um operador ternário (isto é, um operador com 3 operandos) é um equívoco (e bastante presuntivo) para chamá-lo o operador ternário.

Olhe para a resposta de Paolo entender o operador ternário.

Para fazer o que você está olhando para fazer você pode querer usar uma variável de sessão.

No topo da sua página de colocar isso (porque você pode qualquer coisa que não a saída para a página antes de iniciar uma sessão. OU SEJA DECLARAÇÕES NO ECHO)

session_start();

Então, quando um usuário envia o formulário, senão o resultado dessa variável de servidor. Se esta é a primeira vez que o usuário enviar o formulário, basta salvá-lo diretamente, caso contrário, percorrer e adicionar qualquer valor que não está vazio. Veja se é isso que você está procurando:

CÓDIGO 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>

código de Processamento (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>';
}
?>

É o mesmo que:

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

Basicamente, se $ _POST [ 'item'] existe então $ itens é configurado para que caso contrário, fica definido para uma matriz vazia.

É um operador ternário que essencialmente diz que se a chave itens está nas _POST, em seguida, definir $ itens $ para igualar o valor de $ _ POST [ 'item'] set então ele a uma matriz nula.

Eu percebi que é importante notar também que ?: é um operador separado, em que:

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

é uma abreviação para:

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

Além de digitação menos, a vantagem de tempo de execução é que, se estiver usando uma função como two(), a função só seria avaliada uma vez utilizando a forma abreviada, mas possivelmente duas vezes usando a forma longa.

Sim ... é operador ternário

a simples e clara explicação fornecida aqui , em que o autor disse que é como responder: “? Bem, é verdade”

o cólon separa dois valores possíveis (ou). o primeiro valor será escolhido se a expressão de teste é verdadeira. o segundo (atrás do cólon) será escolhido se as primeiras respostas é falsa.

operador ternário muito útil na criação de variável no 7.x php, livre de aviso prévio aviso. Por exemplo, "

$mod = isset($_REQUEST['mod']) ? $_REQUEST['mod'] : "";
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top