2016-07-12 14 views
0

Ich habe Schwierigkeiten, nach leeren Werten in meinem assoziativen Array zu suchen. Und wenn ein Wert leer/null ersetzen Sie es mit dem Wortlaut "nicht eingegeben"Auf leere Werte im assoziativen Array prüfen

Mein $ _SESSION [ 'Geschenk'] Array:

Array 
(
    [0] => Array 
     (
      [giftGiveMy] => 1a 
      [giftTo] => 2a 
     ) 

    [1] => Array 
     (
      [giftGiveMy] => 1b 
      [giftTo] => '' //### empty ### 
     ) 

) 



if (empty($_SESSION['gift']) && 0 !== $_SESSION['gift']) { 
    $gifts = "No specific gifts identified.\n"; 
} else { 
    $gifts = []; 
    foreach($_SESSION['gift'] as $value) { 
     $gifts[] = "I give my ". $value['giftGiveMy'] ." to ". $value['giftTo'] .".\n"; 
    } 
    $gifts = join($gifts); 
} 

Die oben genannten Ausgänge:

Ich gebe meine 1a bis 2a.
Ich gebe meine 1b zu.

Ich würde es lesen mag:

Ich gebe mein 1a bis 2a.
Ich gebe meine 1b nicht eingegeben.

+2

Sie bereits seine Multi dimensionierte kennen, können Sie nicht nur verlassen sich auf 'empty ($ _ SESSION [ 'Geschenk']) 'allein, das überprüft nur die erste Ebene, fügen Sie einfach die Überprüfung innerhalb der 'foreach' Block – Ghost

Antwort

1

Gerade foreach Schleife alle Werte verwenden und überprüfen, ob es empty

$emptyText = '<b>not entered</b>'; 

// `empty` will also be true if element does not exist 
if (empty($_SESSION['gift'])) { 
    $gifts = "No specific gifts identified.\n"; 
} else { 
    $gifts = []; 

    foreach($_SESSION['gift'] as $value) { 
     $myGive = !empty($value['giftGiveMy']) ? $value['giftGiveMy'] : $emptyText; 
     $giftTo = !empty($value['giftTo']) ? $value['giftTo'] : $emptyText; 
     $gifts[] = "I give my {$myGive} to {$giftTo}."; 
    } 

    $gifts = implode("\r\n", $gifts); // Or `<br/>` if outputted to HTML 
} 
1

Sie sollten Ihren Code ändern und es auf diese Weise schreiben:

if (!isset($_SESSION['gift']) || empty($_SESSION['gift'])) { 

    $gifts = "No specific gifts identified.\n"; 

} else { 

    foreach($_SESSION['gift'] as $value) { 

     $gift_to = !empty($value['giftTo']) ? $value['giftTo'] : '<strong>Not entered<strong>'; 
     $gifts[] = "I give my ". $value['giftGiveMy'] ." to ". $gift_to .".\n"; 
    } 
} 
1

Vielleicht möchten Sie dies versuchen:

if (empty($_SESSION['gift']) && 0 !== $_SESSION['gift']) { 
    $gifts = "No specific gifts identified.\n"; 
    } else { 
    $gifts = []; 
    foreach($_SESSION['gift'] as $value) { 
     $gifts[] = "I give my ". $value['giftGiveMy'] ." to ". (!empty($value['giftTo']) ? $value['giftTo'] : '<b>not entered</b>') .".\n"; 
    } 
    $gifts = join($gifts); 
} 

Wenn Sie es ein wenig sauberer machen möchten, dass Sie die extrahieren könnte ternärer Operator in so etwas;

$giftTo = !empty($value['giftTo']) ? $value['giftTo'] : '<b>not entered</b>'; 
$gifts[] = "I give my ". $value['giftGiveMy'] ." to ". $giftTo .".\n"; 
1

Versuchen:

$arr = $_SESSION['gift']; 
foreach($arr as $key => $array) { 
    if($array['giftGiveMy'] == null || empty($array['giftGiveMy'])) { 
    $arr[$key]['giftGiveMy'] = 'not entered.'; 
    } 
    if($array['giftTo'] == null || empty($array['giftTo'])) { 
    $arr[$key]['giftTo'] = 'not entered.'; 
    } 
} 
2

Sie ist alles leer und NULL-Wert mit not entered mit Hilfe von array_walk_recursive ersetzen und benutzen Sie den Code, wie er ist

array_walk_recursive($arrayMain, 'not_entered'); 

    function not_entered(& $item, $key) { 
    if (($item === "") || ($item ==NULL)){ 
     $item = "not entered"; 
    } 
} 
var_dump($arrayMain); 
1

ich, dass diese Art und Weise schreiben würde:

$gifts = "No specific gifts identified.\n"; 

$filter = function($str) { 
       return empty($str) ? 'not entered' : $str; 
      }; 

if(!empty($_SESSION['gift'])) { 
    $gifts = ''; 
    array_walk($_SESSION['gift'], function($given) use(&$gifts,$filter){ 
     $gifts .= 'I give my ' . $filter($given['giftGiveMy']) . ' to ' . $filter($given['giftTo']) . ".\n"; 
    }); 
} 
0

Sie für den folgenden Code auch keine Notwendigkeit besteht, irgendwelche zusätzlichen PHP-Funktionen verwenden können.

$arr = array(
    0 => array(
     'giftGiveMy' => '1a', 
     'giftTo' => '2a' 
    ), 
    1 => array(
     'giftGiveMy' => '1b', 
     'giftTo' => '' 
    ) 
); 

$str = ''; 
if (!empty($arr)) { 
    foreach ($arr as $key => $value) { 
     if ($value['giftGiveMy'] == '') 
      $value['giftGiveMy'] = 'not entered'; 
     if ($value['giftTo'] == '') 
      $value['giftTo'] = '<strong>not entered</strong>'; 
     //$new[$key] = $value; 
     $str .= "I give my " . $value['giftGiveMy'] . " to " . $value['giftTo'] . "<br />"; 
    } 
}else { 
    $str = 'No specific gifts identified.<br />'; 
} 

echo $str; 
0

Dies bestätigt ein assoziatives Array mit empty() (siehe array_filter), kann jedoch nicht auf die ursprüngliche Frage antworten.

<?php 

$var = array(); 
$var['position'] = 'executive'; 
$var['email'] = '[email protected]'; 
$var['message'] = 'This is the message'; 
$var['name'] = 'John Doe'; 
$var['telephone'] = '123456789'; 
$var['notneededparam'] = 'Nothing'; 

$expectedParams = ['position', 'email', 'message', 'name', 'telephone']; 

$params = array_intersect_key($var, array_flip($expectedParams)); 

// check existence of keys and that they are valid 
if(count($params) != count($expectedParams) || count(array_filter($params)) != count($expectedParams)){ 
    echo "not valid\n"; 
    die(); 
} 

extract($params); 

var_dump($name); 

Weitere Funktionen hier verwendet: array_flip(), array_intersect_key(), count(), extract(), var_dump(),

Verwandte Themen