1

我有一个使用 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
4

3 回答 3

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;
}
于 2013-05-31T05:25:02.950 回答
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

于 2013-05-31T05:28:48.843 回答
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>';
}
于 2013-05-31T05:16:55.157 回答