【问题标题】:Check if key exists in array from function result - PHP从函数结果检查数组中是否存在键 - PHP
【发布时间】:2013-10-16 18:47:08
【问题描述】:

我有一个函数可以检查给定父 ID 的树上的子节点:

function categoryChild($id) {

    $mysqli = dbConnect();

    $query = "select folders_id, childof from folders where childof = $id";
    $result = $mysqli->query($query);

    $children = array();

    if(mysqli_num_rows($result) > 0) {
        while($row = mysqli_fetch_array($result)) {
            $children[$row['folders_id']] = categoryChild($row['folders_id']);
        }
    }

    return $children;
}

如果我使用:print_r(categoryChild($folder_id)); 我会得到例如以下:

Array ( [21] => Array ( [22] => Array ( ) ) [24] => Array ( [25] => Array ( ) ) ) 

我希望能够简单地检查数组中的数字...我试过了:

if(in_array ("25", categoryChild($folder_id))){
    echo 'yeah';
};

但它什么也没做。

有没有办法做到这一点?

【问题讨论】:

  • 您将 SQL 注入到您的代码中,使其不安全。请改用准备好的语句和绑定变量。
  • @h2ooooooo 谢谢,但我稍后会处理,我可能会使用 PDO,当我根据需要完成所有工作时

标签: php arrays


【解决方案1】:

你想要的是检查key 没有value

in_array 你正在检查value 是否存在

您必须使用array_key_exists 才能检查key

if (array_key_exists(25, categoryChild($folder_id))) {
    echo 'yeah';
 }

要在嵌套数组中查找键,您可以使用:

 $keySearch=25;
 $array=categoryChild($folder_id);

foreach ($array as $array_data) {
    if (array_key_exists($keySearch, $array_data)) {
     echo 'yeah';
    }
}

注意:

25 是 INT 不是字符串

A useful link how to prevent SQL Injections in PHP

更新

如果你的数组是这样的

$array = array(
    21 => '',
    24 => array(
        22 => '',
        25 => ''
    )
);

$keySearch = 21;

if (count($array) == count($array, COUNT_RECURSIVE)) {
//  single array
  if (array_key_exists($keySearch, $array)) {
    $result = 'yeah1';
  }else{
    $result = 'no';
  }
} else {
//  nested array;
  foreach ($array as $value) {
    if (array_key_exists($keySearch, $array)) {
      $result = 'yeah2';
    }else{
      $result='no';
    }
  }
}

echo $result;//output yeah2

【讨论】:

  • 作为他的输出 (print_r),array_key_exists 的第一个示例应该可以工作。
  • 是的...另一种选择-:)
  • 仍然无法正常工作 - 在此它仅将 22 和 25 视为键 - Array ( [21] => Array ( ) [24] => Array ( [22] => Array ( ) [ 25] => 数组 ( ) ) )
  • @DarrenSweeney 发布您的阵列进行测试,您发布的阵列不正确try this
  • @EmilioGort 它显示“$object = NULL;”但这正是 print_r(categoryChild($folder_id)) 给我的,如 OP 所示。
【解决方案2】:

您可以使用 array_key_exists() 或简单的 isset

if(isset($ARR[$key]))
     echo "yep!";

【讨论】:

  • 当数组key存在但值为null时,isset返回false,array_key_exists返回true。
  • 真的!但如果用户知道他的值不会为空,则可能会有用。
猜你喜欢
  • 2010-11-25
  • 1970-01-01
  • 1970-01-01
  • 2013-10-25
  • 2016-06-22
  • 1970-01-01
  • 2017-09-05
  • 2016-08-28
  • 2017-10-11
相关资源
最近更新 更多