搜索数组并获得结果

时间:2014-10-21 22:54:40

标签: php arrays

好的,所以我想在数组中查找信息并根据传递的凭据获取返回的块。我现在这样做的方式不起作用,我正在寻找一个更短的过程和更简单的过程。

现在我有这个:

public function get_product($product_id, $color, $size)
{
    $results = $this->pf->get('products/'.$product_id);

    $vars = $results['variants'];

    $details = array();

    foreach($vars as $var)
    {
        if(!in_array($product_id, $details))
        {
            if($var['product_id'] == $product_id)
            {
                if($var['size'] == $size)
                {
                    if($var['color'] == $color)
                    {
                        $details[$var['id']] = array(
                            'id' => $var['id'],
                            'name' => $var['name'],
                            'image' => $var['image'],
                            'price' => $var['price'],
                        );
                    }
                }
            }
        }
    }

    return $details;
}

这会收到product_id,颜色和大小。有时$color为空,有时$size为空,有时$color$size都为空,我们只需找到与{{1}匹配的一个数组}。

我想要归还的是:

$product_id

现在没有任何回报。 $details[$var['id']] = array( 'id' => $var['id'], 'name' => $var['name'], 'image' => $var['image'], 'price' => $var['price'], ); 返回此示例:(这是我需要搜索的内容。)

$results

请注意{ "code": 200, "result": { "product": { "id": 1, "type": "POSTER", "brand": null, "model": "Poster", "image": "https://d1yg28hrivmbqm.cloudfront.net/products/poster_18x24.jpg", "variant_count": 9, "files": [ { "id": "default", "title": "Print file", "additional_price": null }, { "id": "preview", "title": "Mockup", "additional_price": null } ], "options": [] }, "variants": [ { "id": 4464, "product_id": 1, "name": "Poster 12×12", "size": "12×12", "color": null, "color_code": null, "image": "https://d1yg28hrivmbqm.cloudfront.net/products/1/4464.jpg", "price": "9.00" }, 如何返回colornull就是这样。所以基本上我想要一种更快更好的方法来搜索返回的数组以获得指定的product_id,大小和颜色。所以我需要返回并匹配与提交的变量匹配的相应变体块。

我希望我已经理解了我想要实现的目标。

更新

这就是我所需要的。

因此,在我的网站上,客户选择了一种产品,在这种情况下是一张海报。在将其添加到购物车之前,系统会提示他们选择尺寸。比方说12x12。 API的工作方式是它有一个“顶部”项目,然后有较小的项目“变体”,包括大小和颜色。每个变体都是不同大小的海报。获得海报产品的唯一方法是接收海报的每个变体。但是每个“变体”都有不同的“id”发送给api以订购正确的产品。

所以,我收到的产品和它的散装或各种颜色和尺寸的变体都是它自己的变体。

size

但请记住客户想要一张12x12的海报吗?我们只需要发送要求打印12x12海报。所以我们需要向api发送匹配12x12大小的变体的ID。

我需要一种方法来搜索每个变体的产品,并找到与海报的product_id匹配的正确变体,以及12x12的尺寸要求。

"variants": [
        {
            "id": 4464,
            "product_id": 1,
            "name": "Poster 12×12",
            "size": "12×12",
            "color": null,
            "color_code": null,
            "image": "https://d1yg28hrivmbqm.cloudfront.net/products/1/4464.jpg",
            "price": "9.00"
        },
        {
            "id": 1349,
            "product_id": 1,
            "name": "Poster 12×16",
            "size": "12×16",
            "color": null,
            "color_code": null,
            "image": "https://d1yg28hrivmbqm.cloudfront.net/products/1/1349.jpg",
            "price": "11.00"
        },

一旦找到正确的变体,我需要将所有信息收集到一个新数组中并返回它。

        {
            "id": 4464,
            "product_id": 1,
            "name": "Poster 12×12",
            "size": "12×12",
            "color": null,
            "color_code": null,
            "image": "https://d1yg28hrivmbqm.cloudfront.net/products/1/4464.jpg",
            "price": "9.00"
        },

我希望能够更好地清理我需要的东西。

1 个答案:

答案 0 :(得分:0)

试试这个。我也在假设你使用的是php。如果您有疑问,请直接问我。我想我可以帮助你,但我不确切地知道你想要什么。

<?php
function get_product($object){
    $result = json_decode($object);

    $product_id = $result->result->product->id;
    $variants = $result->result->variants;

    $details = array();

    foreach($variants as $variant):
        $details[] = $variant;
    endforeach;// foreach

    return $details;
}

$json_obj = '{
    "code": 200,
    "result": {
        "product": {
            "id": 1,
            "type": "POSTER",
            "brand": null,
            "model": "Poster",
            "image": "https://d1yg28hrivmbqm.cloudfront.net/products/poster_18x24.jpg",
            "variant_count": 9,
            "files": [
                {
                    "id": "default",
                    "title": "Print file",
                    "additional_price": null
                },
                {
                    "id": "preview",
                    "title": "Mockup",
                    "additional_price": null
                }
            ],
            "options": []
        },
        "variants": [
            {
                "id": 4464,
                "product_id": 1,
                "name": "Poster 12×12",
                "size": "12×12",
                "color": null,
                "color_code": null,
                "image": "https://d1yg28hrivmbqm.cloudfront.net/products/1/4464.jpg",
                "price": "9.00"
            }
        ]
    }
}';

$array = json_decode($json_obj);
echo '<pre>';
print_r(get_product($json_obj));
echo '</pre>';