【问题标题】:Getting std class value without using foreach在不使用 foreach 的情况下获取 std 类值
【发布时间】:2018-05-31 10:04:06
【问题描述】:

首先我感谢所有阅读这篇文章的人。 这就是问题所在。 我正在尝试从该类别数组下的这两个 std 类中获取 category_id 并将它们添加到另一个数组中,例如

$categories = array(75,65);

有没有我可以在不使用 foreach 的情况下获得它们? 它已经在 foreach 中,我需要这个类别才能继续下一步。

[categories] => Array
(
    [0] => stdClass Object
        (
            [product_category_id] => 83125
            [category_id] => 75
            [product_id] => 10836
            [ordering] => 2
            [category_parent_id] => 51
            [category_type] => product
            [category_name] => Men boxer
            [category_description] => 
            [category_published] => 1
            [category_ordering] => 3
            [category_left] => 34
            [category_right] => 35
            [category_depth] => 5
            [category_namekey] => product_1494167920_122781373
            [category_created] => 1494167920
            [category_modified] => 1502169524
            [category_access] => all
            [category_menu] => 0
            [category_keywords] => men swimsuit, men swimming pants, swimsuit, men swimming suit, long sleeve swimming suit
            [category_meta_description] => Buy men swimming suit at xxxxx, men long sleeve swimsuit and swimming boxer available, Buy 2 FREE shipping
            [category_layout] => 
            [category_page_title] => Men Swim Boxer - xxxxx
            [category_alias] => men-boxer
            [category_site_id] => 
            [category_canonical] => 
            [category_quantity_layout] => 
            [hasbought] => 
        )

    [1] => stdClass Object
        (
            [product_category_id] => 83124
            [category_id] => 65
            [product_id] => 10836
            [ordering] => 43
            [category_parent_id] => 43
            [category_type] => product
            [category_name] => Accessory
            [category_description] => 
            [category_published] => 1
            [category_ordering] => 5
            [category_left] => 87
            [category_right] => 114
            [category_depth] => 4
            [category_namekey] => product_1476761078_750345878
            [category_created] => 1476761078
            [category_modified] => 1502169605
            [category_access] => all
            [category_menu] => 0
            [category_keywords] => accessory, beach accessory, swimming accessory, xxxx
            [category_meta_description] => Shop accessory at xxxx, beach accessory, fashion accessory, gym accessory and many more, Free shipping & speed delivery
            [category_layout] => 
            [category_page_title] => Accessory - xxxxxxx
            [category_alias] => accessory
            [category_site_id] => 
            [category_canonical] => 
            [category_quantity_layout] => 
            [hasbought] => 
        )

)

【问题讨论】:

  • 为什么不想在 foreach 中使用另一个 foreach?
  • @Geshode 恐怕会拖慢处理速度。
  • 也许可以试试看,它是否会大大降低速度。

标签: php arrays object


【解决方案1】:

您可以将array_map 与回调函数一起使用。在不了解您的代码的情况下,我可以假设您可以尝试这样的事情:

  function get_category_id($category) {
    return $category['category_id'];
  }
  $category_id = array_map('get_category_id', $categories);

如果您有要映射的数组数组,您也可以调查call_user_func_array。我自己还在学习 PHP,但我认为这应该会有所帮助

【讨论】:

    【解决方案2】:

    在我看来,这是 array_reduce 的工作。每次迭代都会添加到数组中。

    http://php.net/manual/en/function.array-reduce.php

    <?php
    $data = makeSomeData();
    
    $categories = array_reduce($data, function($carry, $item){
        $carry[] = $item->category_id;
        return $carry;
    }, []);
    
    print_r($categories);
    echo "\n";
    
    
    function makeSomeData() {
        $input = [65, 165, 265, 365];
        $data = [];
        foreach($input as $id) {
            $a = new stdClass;
            $a->category_id = $id;
            $data[] = $a;        
        }
        return $data;
    }
    

    【讨论】:

      【解决方案3】:

      不确定您为内部数组或对象引用的 foreach,但对于您的情况,只需执行此操作

      $catesTmp[] = array_map( function($item){ 
          return !empty($item->category_id) ? $item->category_id : null;
      }, $categories );
      

      它会返回你需要的结果。

      【讨论】:

        猜你喜欢
        • 2022-06-23
        • 1970-01-01
        • 1970-01-01
        • 2023-04-07
        • 1970-01-01
        • 2019-09-08
        • 1970-01-01
        • 1970-01-01
        • 2021-05-04
        相关资源
        最近更新 更多