获得多阵列的价值

时间:2012-07-20 18:43:58

标签: php arrays multidimensional-array

我如何获得数组中键的值?

该数组由google shopping api完成,即:

// Valid source values are "public", "cx:cse", and "gan:pid"
// See http://code.google.com/apis/shopping/search/v1/getting_started.html#products-feed
$source = "public";

// For more information about full text search with the shopping API, please
// see http://code.google.com/apis/shopping/search/v1/getting_started.html#text-search
$query = "\"mp3 player\" | ipod";

//The order in which the API returns products is defined by a ranking criterion.
// See http://code.google.com/apis/shopping/search/v1/getting_started.html#ranking
$ranking = "relevancy";

$results = $service->products->listProducts($source, array(
  "country" => "UK",
  "q" => $query,
  "rankBy" => $ranking,
));

print "<h1>Shopping Results</h1><pre>" . print_r($results, true) . "</pre>";

我有以下数组输出: 购物结果

Array
(
    [kind] => shopping#products
    [etag] => "*********"
    [id] => tag:google.com,2010:shopping/products
    [selfLink] => https://www.googleapis.com/shopping/search/v1/public/products?country=UK&q=iphone&rankBy=relevancy
    [nextLink] => https://www.googleapis.com/shopping/search/v1/public/products?country=UK&q=iphone&rankBy=relevancy&startIndex=26
    [totalItems] => 771622
    [startIndex] => 1
    [itemsPerPage] => 25
    [currentItemCount] => 25
    [requestId] => 0CMjH976CqbECFYNWtAodLRwAAA
    [items] => Array
    (
        [0] => Array
            (
                [kind] => shopping#product
                [id] => tag:google.com,2010:shopping/products/5735617/11254757413841304510
                [selfLink] => https://www.googleapis.com/shopping/search/v1/public/products/5735617/gid/11254757413841304510
                [product] => Array
                    (
                        [googleId] => 11254757413841304510
                        [author] => Array
                            (
                                [name] => Amazon.co.uk
                                [accountId] => 5735617
                            )

                        [creationTime] => 2012-05-04T05:03:50.000Z
                        [modificationTime] => 2012-07-20T02:02:16.000Z
                        [country] => GB
                        [language] => en
                        [title] => Apple iPod touch 8GB - Black - 4th Generation (Latest Model - Launched Sept 2010)
                        [description] => Apple iPod touch 8GB - Black - 4th Generation (Latest Model - Launched Sept 2010)
                        [link] => http://www.amazon.co.uk/dp/B0040GIZTI/ref=asc_df_B0040GIZTI8843997?smid=A1YZ4RXO7GUOYN&tag=googlecouk06-21&linkCode=asn&creative=22218&creativeASIN=B0040GIZTI
                        [brand] => Apple
                        [condition] => new
                        [gtin] => 00885909394739
                        [gtins] => Array
                            (
                                [0] => 00885909394739
                            )

                        [mpns] => Array
                            (
                                [0] => MC540BT/A
                            )

                        [inventories] => Array
                            (
                                [0] => Array
                                    (
                                        [channel] => online
                                        [availability] => inStock
                                        [price] => 135.95
                                        [shipping] => 1.99
                                        [currency] => GBP
                                    )

                            )

                        [images] => Array
                            (
                                [0] => Array
                                    (
                                        [link] => http://ecx.images-amazon.com/images/I/41p2rNmazRL.jpg
                                        [status] => available
                                    )

                            )

                    )

            )

        [1] => Array
            (
                [kind] => shopping#product
                [id] => tag:google.com,2010:shopping/products/5735617/4597224105326146239
                [selfLink] => https://www.googleapis.com/shopping/search/v1/public/products/5735617/gid/4597224105326146239
                [product] => Array
                    (
                        [googleId] => 4597224105326146239
                        [author] => Array
                            (
                                [name] => Amazon.co.uk
                                [accountId] => 5735617
                            )

                        [creationTime] => 2012-05-04T05:03:50.000Z
                        [modificationTime] => 2012-07-20T02:02:16.000Z
                        [country] => GB
                        [language] => en
                        [title] => SanDisk Sansa Clip+ 8GB MP3 Player with Radio and Expandable MicroSD/SDHC Slot - Black
                        [description] => 8 GB memory Digital FM-tuner with 40 preset radio stations Extendable microSD/microSDHC card slot
                        [link] => http://www.amazon.co.uk/dp/B002NX0ME6/ref=asc_df_B002NX0ME68843997?smid=A3P5ROKL5A1OLE&tag=googlecouk06-21&linkCode=asn&creative=22206&creativeASIN=B002NX0ME6
                        [brand] => SanDisk
                        [condition] => new
                        [gtin] => 00619659059989
                        [gtins] => Array
                            (
                                [0] => 00619659059989
                            )

                        [mpns] => Array
                            (
                                [0] => SDMX18-008G-E46K
                            )

                        [inventories] => Array
                            (
                                [0] => Array
                                    (
                                        [channel] => online
                                        [availability] => inStock
                                        [price] => 46.95
                                        [shipping] => 0
                                        [currency] => GBP
                                    )

                            )

                        [images] => Array
                            (
                                [0] => Array
                                    (
                                        [link] => http://ecx.images-amazon.com/images/I/419U6bYDF1L.jpg
                                        [status] => available
                                    )

                            )

                    )

            )

我不需要所有这些数据,我只需要3-4个按键,但我如何访问它们?我如何回应每个数组中的[title]值?

4 个答案:

答案 0 :(得分:0)

这应该有效:

foreach( $results as $result)
    foreach( $result['product'] as $product) 
        echo $product['title']; 

答案 1 :(得分:0)

您可以像上面指出的那样遍历数组,也可以像这样使用array_walk_recursive:

$title_array = array();

array_walk_recursive($input_array, 'find_titles');

function find_titles($value, $key) {
    global $title_array;
    if ($key == 'title') {
        $title_array[] = $value;
    }
}

如果您不确定输入数组的结构将是什么(即您要查找的键的深度是多少级嵌套),这可能是更好的解决方案。

答案 2 :(得分:0)

在$ results中输出每个产品的标题:

foreach ($results as $result) {
    echo $result['product']['title'];
}

答案 3 :(得分:0)

考虑使用array_walk_recursive

工作示例

<?php
$a = array("hai", array("ha"=>1, "hai"=>2, array("a"=>1, "b"=>2)));
function test($item, $key) 
{
     echo "$key holds $item\n";
}
array_walk_recursive($a, 'test');

0 holds hai
ha holds 1
hai holds 2
a holds 1
b holds 2

如果您只对标题感兴趣

考虑使用foreach

foreach($results['item'] as $result) {
   echo $result['product']['title'];
}