2011-06-18 22 views
1

私は誰かが、配列中であるかどうかを決定するとのトラブルを抱えている:文字列が配列にありませんか?

<?php 
    $depts = $db->query("SELECT depts FROM tbl_staff WHERE id = '".$_SESSION['exp_user']['userid']."'"); 
    $department = $depts->fetch_assoc(); 

    if (!in_array($forumdn['permissions'],$department)) { 
      error_404("Permissions Violation"); 
      return; 
    } 

?> 

var_dumpによって与えられた$forumdn['permissions']の値は次のとおりです。string(1) "0"

var_dumpによって与えられた$departmentの値は次のとおりです。

array(1) { ["depts"]=> string(13) "0,1,2,3,4,5,6" }

+1

uargs。外部キーのリストとしての文字列? dbを再構成してNFに持ち込むほうが良いかもしれません。クエリは簡単にPHPの操作を実行することなく、SQLレベルで行うことができる – knittl

+0

これを再構成しようとすると、完全な悪夢になる - すべてを書き直す必要があります:/ – bear

+0

Shamil:アクセスするAPIを作成する理由データベース。 API内部とそれにアクセスするクライアントを修正するだけで済みます。あなたのコードを構造化しておらず、大きなスパゲッティ混乱の場合、あなたは問題になります:) –

答えて

2

は、他に変更を加えることなく、

$department = explode(',', reset($depts->fetch_assoc())); 

を試してみてください。

これで必要なのはありますか? (質問は私の目にはっきりと言われていないので、私は確信できません)。

唯一の問題は、$departmentが実際には配列であり、必要な配列ではないということです。したがって、reset(文字列は"0,1,2,3,4,5,6")という配列の最初の(そして唯一の)値を分離し、配列0 => 0, 1 => 1など(explodeを使用)にして、最後にin_arrayを呼び出す必要があります。

+1

Downvoter:いくつかのフィードバックを提供してこの回答を改善してください。ありがとう。 – Jon

+0

こんにちはJon - チェックボックスにヒットしようとしていました。 – bear

+0

@Shamil:問題ありません。 :) – Jon

2

var_dumpコールの結果によると、結果は1つの文字列(すべての部門(コンマ区切り))を含む配列に見えます。私の疑問は、結果が個々の配列要素としてコンマで区切られるようにしたいということです(要素1に値 "13"、要素2に値 "14"などが含まれています)。あなたはこのためにexplodeを使用することができます。

$depts = $db->query("SELECT depts FROM tbl_staff WHERE id = '".$_SESSION['exp_user']['userid']."'"); 
$department = $depts->fetch_assoc(); 
$department = explode(",", $department); 

その後in_arrayへのお電話は、ダンディ動作するはずです!

1

試してみてください。

if (!in_array($forumdn['permissions'], explode("," $department["depts"])) 
{ 
    .... 
} 
関連する問題