2011-07-12 18 views
1

それでは救助に! 配列の内容を別の配列と照合する

は、私はこれらの配列を持っていると言う:

if(empty($container['progress'][*first value of given array*][*if exists, second value of given array*])){...} 
:私は何をしたいことは与えられた配列から valueまたは valuesは基本的に影響を与え、空であるかどうかを確認するために $containerをチェックしている

<?php 

$arr_1 = array([0] => 'setup'); 
$arr_2 = array([0] => 'artwork', [1] => 'path'); 
$arr_3 = array([0] => 'artwork', [1] => 'color'); 

$container = array(
    'progress' => array(
     'setup' => 'complete', 
     'artwork' => array(
       'path' => 'complete', 
       'color'=> '', 
     ) 
    ) 
); 

?> 

上記の目標を達成する最良の方法は何ですか?

答えて

1

このような何か:

function array_key_empty($array, $keys) { 
    foreach($keys as $key) { 
     if(!array_key_exists($key, $array)) { 
      return true; 
     } 
     else { 
      $array = $array[$key]; 
     } 
    } 
    return empty($array); 
} 

私はあなたにもキーが存在しない場合はtrueを取得したいと仮定します。

+0

エレガントなソリューション、感謝フェリックス! –

0

あなたはこのような関数を使用できます。

<?php 
function isNestedArrayEmpty($parentArray, $parentKey, $childKeys) 
{ 
    if (empty($parentArray)) 
     return TRUE; 

    $node = $parentArray[$parentKey]; 
    if (empty($node)) 
     return TRUE; 

    if (!empty($childKeys)) 
    { 
     foreach ($childKeys as $key) 
     { 
      if (empty($node[$key])) 
       return TRUE; 
      $node = $node[$key]; 
     } 
    } 

    return false; 
} 
?> 

次に、このように関数を呼び出す:

if (isNestedArrayEmpty($container, 'progress', $arr_1)) { ... } 
if (isNestedArrayEmpty($container, 'progress', $arr_2)) { ... } 
if (isNestedArrayEmpty($container, 'progress', $arr_3)) { ... } 

ここであなたが提供アレイを使用して、完全な実施例です。 (注:私は$arr_1$arr_2および$arr_3のために、インライン変換ツールのキーのまわりの角括弧を削除しました。これは構文エラーのようです)。上記の例から

<html> 
<body> 
<?php 

function isNestedArrayEmpty($parentArray, $parentKey, $childKeys) 
{ 
    if (empty($parentArray)) 
     return TRUE; 

    $node = $parentArray[$parentKey]; 
    if (empty($node)) 
     return TRUE; 

    if (!empty($childKeys)) 
    { 
     foreach ($childKeys as $key) 
     { 
      if (empty($node[$key])) 
       return TRUE; 
      $node = $node[$key]; 
     } 
    } 

    return false; 
} 



$arr_1 = array(0 => 'setup'); 
$arr_2 = array(0 => 'artwork', 1 => 'path'); 
$arr_3 = array(0 => 'artwork', 1 => 'color'); 

$container = array(
    'progress' => array(
     'setup' => 'complete', 
     'artwork' => array(
       'path' => 'complete', 
       'color'=> '', 
     ) 
    ) 
); 



echo '$container[\'progress\'] empty?: '; 
if (isNestedArrayEmpty($container, 'progress', NULL)) { 
    echo 'Yes'; 
} else { 
    echo 'No'; 
} 
echo '<br>'; 

echo '$container[\'progress\'][\'setup\'] empty?: '; 
if (isNestedArrayEmpty($container, 'progress', $arr_1)) { 
    echo 'Yes'; 
} else { 
    echo 'No'; 
} 
echo '<br>'; 

echo '$container[\'progress\'][\'artwork\'][\'path\'] empty?: '; 
if (isNestedArrayEmpty($container, 'progress', $arr_2)) { 
    echo 'Yes'; 
} else { 
    echo 'No'; 
} 
echo '<br>'; 

echo '$container[\'progress\'][\'artwork\'][\'color\'] empty?: '; 
if (isNestedArrayEmpty($container, 'progress', $arr_3)) { 
    echo 'Yes'; 
} else { 
    echo 'No'; 
} 
echo '<br>'; 
?> 
</body> 
</html> 

出力:

$container['progress'] empty?: No 
$container['progress']['setup'] empty?: No 
$container['progress']['artwork']['path'] empty?: No 
$container['progress']['artwork']['color'] empty?: Yes 
関連する問題