1

Solr 検索エンジンを使用しています。次のような検索結果が返されます。

array(2) {
  ["responseHeader"]=>
  array(3) {
    ["status"]=>
    int(0)
    ["QTime"]=>
    int(1)
    ["params"]=>
    array(5) {
      ["wt"]=>
      string(3) "php"
      ["start"]=>
      string(1) "0"
      ["q"]=>
      string(7) "monitor"
      ["version"]=>
      string(3) "2.2"
      ["rows"]=>
      string(2) "10"
    }
  }
  ["response"]=>
  array(3) {
    ["numFound"]=>
    int(2)
    ["start"]=>
    int(0)
    ["docs"]=>
    array(2) {
      [0]=>
      array(11) {
        ["id"]=>
        string(6) "VA902B"
        ["name"]=>
        string(49) "ViewSonic VA902B - flat panel display - TFT - 19""
        ["manu"]=>
        string(15) "ViewSonic Corp."
        ["weight"]=>
        float(190.4)
        ["price"]=>
        float(279.95)
        ["price_c"]=>
        string(10) "279.95,USD"
        ["popularity"]=>
        int(6)
        ["inStock"]=>
        bool(true)
        ["store"]=>
        string(18) "45.17614,-93.87341"
        ["cat"]=>
        array(2) {
          [0]=>
          string(11) "electronics"
          [1]=>
          string(7) "monitor"
        }
        ["features"]=>
        array(1) {
          [0]=>
          string(75) "19" TFT active matrix LCD, 8ms response time, 1280 x 1024 native resolution"
        }
      }
      [1]=>
      array(12) {
        ["id"]=>
        string(7) "3007WFP"
        ["name"]=>
        string(34) "Dell Widescreen UltraSharp 3007WFP"
        ["manu"]=>
        string(10) "Dell, Inc."
        ["includes"]=>
        string(9) "USB cable"
        ["weight"]=>
        float(401.6)
        ["price"]=>
        float(2199)
        ["price_c"]=>
        string(8) "2199,USD"
        ["popularity"]=>
        int(6)
        ["inStock"]=>
        bool(true)
        ["store"]=>
        string(18) "43.17614,-90.57341"
        ["cat"]=>
        array(2) {
          [0]=>
          string(11) "electronics"
          [1]=>
          string(7) "monitor"
        }
        ["features"]=>
        array(1) {
          [0]=>
          string(71) "30" TFT active matrix LCD, 2560 x 1600, .25mm dot pitch, 700:1 contrast"
        }
      }
    }
  }
}

という変数内でこの応答をキャプチャしています$results。私のページでは、次のように各結果セットを取得するために vardump を実行しています。

foreach($results['response'] as $result) {
    if(is_array($result)) {
        foreach($result as $v) {
            var_dump($v);   
        }
    }
}

これはその出力です:

array(11) {
  ["id"]=>
  string(6) "VA902B"
  ["name"]=>
  string(49) "ViewSonic VA902B - flat panel display - TFT - 19""
  ["manu"]=>
  string(15) "ViewSonic Corp."
  ["weight"]=>
  float(190.4)
  ["price"]=>
  float(279.95)
  ["price_c"]=>
  string(10) "279.95,USD"
  ["popularity"]=>
  int(6)
  ["inStock"]=>
  bool(true)
  ["store"]=>
  string(18) "45.17614,-93.87341"
  ["cat"]=>
  array(2) {
    [0]=>
    string(11) "electronics"
    [1]=>
    string(7) "monitor"
  }
  ["features"]=>
  array(1) {
    [0]=>
    string(75) "19" TFT active matrix LCD, 8ms response time, 1280 x 1024 native resolution"
  }
}

array(12) {
  ["id"]=>
  string(7) "3007WFP"
  ["name"]=>
  string(34) "Dell Widescreen UltraSharp 3007WFP"
  ["manu"]=>
  string(10) "Dell, Inc."
  ["includes"]=>
  string(9) "USB cable"
  ["weight"]=>
  float(401.6)
  ["price"]=>
  float(2199)
  ["price_c"]=>
  string(8) "2199,USD"
  ["popularity"]=>
  int(6)
  ["inStock"]=>
  bool(true)
  ["store"]=>
  string(18) "43.17614,-90.57341"
  ["cat"]=>
  array(2) {
    [0]=>
    string(11) "electronics"
    [1]=>
    string(7) "monitor"
  }
  ["features"]=>
  array(1) {
    [0]=>
    string(71) "30" TFT active matrix LCD, 2560 x 1600, .25mm dot pitch, 700:1 contrast"
  }
}

これはまさに私が必要としているものですが、「ネストされた foreach ループと配列チェック」アプローチよりも、それを取得するためのよりエレガントな方法があるかどうか疑問に思っていました。

4

1 に答える 1

2
foreach ($results['response']['docs'] as $result) {
   ...
}
于 2012-04-20T01:26:50.440 に答える