2017-02-23 14 views
1

を返し、私は次のコードでWarning: Illegal offset type in...を受け付けております。この場合$new_node警告:不正なオフセット型が、in_array()がtrue PHP

$this->open_nodes[$new_node] 

カスタムオブジェクトですが、私はそれのために__toString()方法を実装しています。

私は通常、要素が配列内にないと仮定しますが、in_array($new_node, $this->open_nodes)を呼び出すと直前にその行が呼び出されたときにtrueを返します。

私は同じコードを別のモジュールで実行しており、ノードクラスとのわずかな違いしかなく、正常に動作しています。

+0

のようなルックスをどう思うか、あなたのコードの例を作っ機能array_key_exists() を見てする必要があると思います。それは同じではありません。 – RST

答えて

0

私たちはここでいくつかのコードを忘れていると思います。
最初に何をしようとしていますか?$this->open_nodes[$new_node];

in_arrayは、$new_nodeの位置に要素を追加しようとしているように、あなたのケースでlitteral配列([a, b, n])内に要素があるかどうかをチェックします。あなたは何ができるか

PHP Array documentationから
in_array($new_node, array_keys($this->open_nodes))

1

を使用して、配列のキーで検索です:

配列やオブジェクトをキーとして使用することはできません。そうすると警告が表示されます:不正なオフセットタイプ。あなたが有効にする__toString()をしたい場合は

あなたはそれをキャストする必要があります。

$this->open_nodes[(string) $new_node]

はまたin_array()$new_node$this->open_nodesvalues(NOT keys)であることを確認しているので、存在しなければなりませんそこに置いてある他のコード。あなたがキーを指定し、それにノードを割り当てる必要が警告

Warning: Illegal offset type in... 

0

$this->open_nodes['node_name'] = $node; 

私はあなたが私はあなたをインデックスとしてそれを使用して、値をチェックしin_array` `私は

class Example 
{ 
    protected $open_nodes = []; 

    public function __construct($open_nodes = []) 
    { 
    $this->open_nodes = $open_nodes; 
    } 

    public function check_exists($key) 
    { 
    return array_key_exists($key, $this->open_nodes); 
    } 
} 

$example = new Example([ 
    'node_one' => 'Node one test', 
    'node_two' => 'Node two test', 
]); 

if((bool)$example->check_exists('node_one')) 
{ 
    echo "Node one exists" . PHP_EOL; 
} else { 
    echo "Node one doesn't exist" . PHP_EOL; 
} 

if((bool)$example->check_exists('node_three')) 
{ 
    echo "Node three exists"; 
} else { 
    echo "Node three doesn't exist"; 
} 
関連する問題