开发者

Checking contents of array against another array

SO to the rescue!

Say I have these arrays:

<?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'=> '',
         )
    )
);

?>

What I want to开发者_JAVA技巧 do is check the $container to see if the value or values from the given arrays are empty, basically giving the effect of:

if(empty($container['progress'][*first value of given array*][*if exists, second value of given array*])){...}

What is the best way to achieve said goal?


Something like this:

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

I assume you also want to get true if the keys don't exist.


You could use a function like this:

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

Then call the function like this:

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

Here is a complete working example, using the arrays you provided. (Note: I removed the square brackets around the keys in the intializers for $arr_1, $arr_2 and $arr_3, as this seems to be a syntax error).

<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>

Output from the above example:

$container['progress'] empty?: No
$container['progress']['setup'] empty?: No
$container['progress']['artwork']['path'] empty?: No
$container['progress']['artwork']['color'] empty?: Yes
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜