检查多维数组中是否存在数组键

时间:2013-05-31 05:11:57

标签: php arrays multidimensional-array

我有一个使用mysql生成的数组:

$conn = connect();
$stmt = $conn->prepare("select id, type, status from arraytest");
$stmt->execute();
$myArray = $stmt->fetchAll();

当我print_r($myArray)时,我明白了:

Array ( [0] => Array ( [id] => 3 [0] => 3 [type] => 0 [1] => 0 [status] => 0 [2] => 0 ) [1] => Array ( [id] => 6 [0] => 6 [type] => 0 [1] => 0 [status] => 1 [2] => 1 ) ) 

我也可以这样访问数组:

echo $myArray[0][0]. ' ' . $myArray[0][1]. ' ' . $myArray[0][2];
echo '<br>';
echo $myArray[1][0]. ' ' . $myArray[1][1]. ' ' . $myArray[1][2];

表数据很简单:

"id"    "type"  "status"
"3"    "0"      "0"
"6"    "0"      "1"

我需要针对while循环运行数组,并检查数组中的id是否与$i匹配。但是如何使用这样的数组呢?我想不通?你能帮忙吗?

while ($i <= 10) {
    echo $i;
    echo ((array_key_exists($i,$myArray)) ? ' OK <br>' : ' Fail <br>'); // I need to check if $i == id from the array. 
    $i++;
    echo '<br>';
}

预期输出

1 Fail
2 Fail
3 OK
4 Fail
5 Fail
6 OK
//and so on

3 个答案:

答案 0 :(得分:0)

while ($i <= 10) {
    echo $i;
    echo ($i==$myArray[$i]['id']) ? ' OK <br>' : ' Fail <br>';
    $i++;
    echo '<br>';
}

修改

编辑问题后,这是一个不同的故事。试试这个:

while ($i <= 10) {
    echo $i;
    $msg=' Fail <br>';
    foreach ($myArray as $v)
        if ($i==$v['id']) $msg=' OK <br>';
    echo $msg;
    $i++;
    echo '<br>';
}

答案 1 :(得分:0)

您可以修改以下代码以获取该代码。这是遗传密码

<?php

/**
 * Get list of all keys of a multidimentional array
 *
 * @param array $array Multidimensional array to extract keys from
 * @return array
 */
function array_keys_multi(array $array)
{
    $keys = array();

    foreach ($array as $key => $value) {
        $keys[] = $key;

        if (is_array($array[$key])) {
            $keys = array_merge($keys, array_keys_multi($array[$key]));
        }
    }

    return $keys;
}

答案 2 :(得分:0)

这对您的代码进行了相当少的更改:

while ($i <= 10) {
    echo $i;
    $matched = array_filter($myArray, function($record) use ($i) {
        return $record['id'] === $i;
    });
    echo !empty($matched) ? ' OK <br>' : ' Fail <br>';
    $i++;
    echo '<br>';
}

在每个循环中,$matched设置为id等于$i的记录数组。如果匹配则为非空,否则为空。

当然,您也可以使用普通foreach循环来确定是否存在匹配的ID。

http://www.php.net/manual/en/function.array-filter.php