0

私は単に返された重みをエコーし​​ようとしていて、非常に間違ったことをしています。

返されたデータのサンプルは次のとおりです。Array([error] => [warning] => [status] => 0 [fields] => Array([0] =>phrase)[attrs] => Array()

   [matches] => Array
     (
        [34] => Array
            (
                [weight] => 1707
                [attrs] => Array
                    (
                    )

            )

    )

したがって、IDを取得するための作業コードは次のとおりです。これは私には理にかなっています。

      if ( ! empty($result["matches"]) ) {
      foreach ( $result["matches"] as $doc => $docinfo ) {
            echo "DOC ID:$doc\n";
      }

      print_r( $result );
  }

doc idを使用して別のforeachを試し、ループして重みを取得しました。

foreach $doc as $weight  {

それは機能しません。多次元配列で何か間違ったことをしていると思いますが、ネストされた配列をどのようにアドレス指定するかは正確にはわかりません。

ありがとう

4

1 に答える 1

1

再帰関数を試す必要があります

$array =array(
    "matches" => array(
        array("weight"=>1707,"attrs"=>array("weight"=>100)),
        array("weight"=>1700,"attrs"=>array("weight"=>170)),
        array("weight"=>10,"attrs"=>array("weight"=>170,"attr"=>array("weight"=>"something other")))
    )
);

function recurse($array){
    foreach ($array as $arr){
        if (is_array($arr)){
            recurse($arr);
        } else {
            echo $arr . "<br>";
        }
    }
}

recurse($array);

Note: この関数はweight、任意のレベル配列からすべてのパラメータ値を返します

更新しました

weight次の配列からパラメータ値だけを出力したい場合は、これを試してください

$array =array(
    "matches" => array(
        array("weight"=>1707,"attrs"=>"other param"),
        array("weight"=>1700,"attrs"=>"something other too"),
    )
);

foreach($array['matches'] as $arr){
    echo $arr['weight'] . "<br>";
}
于 2013-02-24T19:33:21.677 に答える