将所有表行提取到数组PHP

时间:2014-09-13 16:44:38

标签: php arrays oracle oci

我一直试图找出如何将所有行提取到数组中,并检查某些输入是否作为该数组中的条目存在。

$name = $_POST["name"];
$myarray = array();
$getnames = "SELECT NAME FROM PEOPLE";
$names = oci_parse($conn,$names);
oci_execute($names);
while (($row = oci_fetch_row($names)) != false) {
    $myarray[] = oci_fetch_row($names);
}

if(!in_array($name, $myarray)) {
      echo "That name doesn't exist.";
  }

在我的表中有:

NAME
Fred
Bob
Hamlet

在我使用" Bob"作为输入,我使用var_dump($myarray)只是为了查看该数组中包含的内容:

array(2) { [0]=> array(1) { [0]=> string(3) "Bob" } [1]=> bool(false) }

我的输出是:

That name doesn't exist.

输出是我没想到的(正如我预期的那样#34; Bob"在数组中),所以我猜测我的方法是将行输入到阵列是不够的。

我可以做什么才能将行提取到数组中?

1 个答案:

答案 0 :(得分:2)

它不起作用,因为Bob在$myarray中不作为值存在,但它在$myarray[0][0]中,即。{作为$myarray的第一项中的值。

您需要一个递归到结果数组的函数:

function recursive_in_array($needle, $haystack) {
    if (!is_array($haystack)) return false;
    $match = false;
    foreach ($haystack as $item) {
        if (is_array($item)) $match = recursive_in_array($needle, $item);
        if ($match || in_array($needle, $haystack)) return true;
    }
    return false;
}

我只是快速测试了这个,但它应该可以解决这个问题。