2016-07-12 5 views
0

내 연관 배열에서 빈 값을 확인하는 데 어려움을 겪고 있습니다. 값이 비어있는 경우 그리고/널 (null) "입력하지"문구로 교체연관 배열에서 빈 값 확인

$ _SESSION [ '선물'] 배열 :

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); 
} 

위의 출력 : I 줄

내 1a에서 2a.
나는 나의 1b를 준다.

나는 그것을 읽고 싶습니다 :

저는 2a에 2a를줍니다.
내 머리에 을 입력하면이 입력되지 않습니다.

+2

이미 다 치수가, 당신은 단지'에 의존 할 수는 알 빈 ($ _ SESSION [ '선물']) '혼자서, 이것은 단지 첫 번째 레벨을 검사 할 뿐이다. 단지'foreach' 블록 안에 검사를 추가하면된다. – Ghost

답변

1

그냥 루프에 모든 값을 foreach을 사용하고 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

당신은 당신의 코드를 수정하고 이런 식으로 작성해야 : 당신이 그것을 당신이를 추출 할 수있는 작은 청소기를 확인하려는 경우

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); 
} 

:

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

당신이 시도 할 수 있습니다를 삼항 연산자를 다음과 같이 변환합니다.

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

시도 :

$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

당신은 array_walk_recursive의 도움으로 not entered 모든 빈과 NULL 값을 대체 할 수 있는지 확인 그대로 코드를 사용하십시오.

array_walk_recursive($arrayMain, 'not_entered'); 

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

나는이 방법 있음을 써서 :

$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

당신은 아래의 코드를 사용할 수 있습니다 도 필요에게 여분의 PHP 함수가 없다.

$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

empty()와 연관 배열을 (array_filter 참조)의 유효성을 확인하지만, 원래의 질문에 응답하지 않을 수 있습니다.

<?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); 

다른 기능은 여기에 사용 : array_flip(), array_intersect_key()는, count()extract(), var_dump()는,

관련 문제