【问题标题】:insert in to multi dimensional array in php for loop在php for循环中插入多维数组
【发布时间】:2014-07-18 06:22:18
【问题描述】:

下面是我的数组结构

Array
(
[0] => Array
    (
        [product_id] => 59
        [product_name] => Samsung Champ DUOS E2652 
        [product_price] => 4439
        [sub_cat_name] => Samsung
        [sub_cat_url] => samsung
        [image] => samsung-champ-duos-e2652---1414801404364308.jpg
        [currency] => ₹
    )

[1] => Array
    (
        [product_id] => 195
        [product_name] => Samsung Galaxy Tab 4 7.0
        [product_price] => 17847
        [sub_cat_name] => Samsung
        [sub_cat_url] => samsung
        [image] => galaxy-tab-4-7-0---1715601405057269.png
        [currency] => ₹
    )

[2] => Array
    (
        [product_id] => 284
        [product_name] => Samsung Galaxy Tab 3 Lite 7.0
        [product_price] => 18000
        [sub_cat_name] => Samsung
        [sub_cat_url] => samsung
        [image] => galaxy-tab-3-lite-7-0---1590061405576878.png
        [currency] => ₹
    )

[3] => Array
    (
        [product_id] => 19
        [product_name] => Samsung Galaxy Star
        [product_price] => 4833
        [sub_cat_name] => Samsung
        [sub_cat_url] => samsung
        [image] => feature-img144811404109906.jpg
        [currency] => ₹
    )

[4] => Array
    (
        [product_id] => 186
        [product_name] => Samsung Galaxy S5 Active
        [product_price] => 31922
        [sub_cat_name] => Samsung
        [sub_cat_url] => samsung
        [image] => galaxy-s5-active368091404989896.png
        [currency] => ₹
    )

)

我想根据sub_cat_url 对这个数组进行排序,如下所示

array
(
[0] => samsung
   [0] => Array
    (
        [product_id] => 186
        [product_name] => Samsung Galaxy S5 Active
        [product_price] => 31922
        [sub_cat_name] => Samsung
        [sub_cat_url] => samsung
        [image] => galaxy-s5-active368091404989896.png
        [currency] => ₹
    )
    [1] => Array
    (
        [product_id] => 284
        [product_name] => Samsung Galaxy Tab 3 Lite 7.0
        [product_price] => 18000
        [sub_cat_name] => Samsung
        [sub_cat_url] => samsung
        [image] => galaxy-tab-3-lite-7-0---1590061405576878.png
        [currency] => ₹
    )
)

为此,我编写了如下代码。

for($i = 0; $i < $count; $i++){
            if($i == 0){
                $search_array[$i] = $search_data[$i]["sub_cat_name"];
                $search_array[$i] = $search_data[$i]["product_name"];
                $j += 1;
            }
            else if($search_data[$i]["sub_cat_url"] !== $search_data[$i]["sub_cat_url"]){
                $search_array[$i] = array($search_data[$i]["sub_cat_name"]);
                $search_array[$i] = array($search_data[$i]["product_name"]);
                $j += 1;
            }
            else if($search_data[$i]["sub_cat_url"] === $search_data[$i]["sub_cat_url"]){
                $search_array[$i] = array($search_data[$i]["product_name"]);
                $j += 1;
            }
        }

但效果并不好。我也尝试使用内部 for 循环。它也没有给我实际的结果。有人可以帮我写下正确的循环语句吗? 提前谢谢你

【问题讨论】:

  • 你想得到 sub_cat_url 字段过滤的产品?
  • 是的..完全正确..对不起...忘记添加问题..现在将编辑
  • 你不能通过传递你的子类别直接从数据库中获取它吗?或者你仍然需要它来编码
  • 我需要通过编码..

标签: php arrays for-loop multidimensional-array


【解决方案1】:

如果我理解你的话,这应该可以:

$out = array();

$map = array();

foreach ($array as $k => $v) {
   $url = $v['sub_cat_url'];

   if (!isset($map[$url])) {
     $map[$url] = count($out);
   }
   $out[$map[$url]][$url][$k] = $v; // or $out[$map[$url]][$url][] = $v;

}

但是我没有测试过(你没有提供PHP格式的数据)

【讨论】:

  • 非常感谢您的帮助...它按我的预期工作 100%... :)
猜你喜欢
  • 2019-07-25
  • 2017-12-17
  • 1970-01-01
  • 2016-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-25
  • 2013-06-25
相关资源
最近更新 更多