【问题标题】:Fastest way to get value from PHP array?从 PHP 数组中获取价值的最快方法?
【发布时间】:2021-04-30 22:36:36
【问题描述】:

我有一个名为 $allStock 的数组,它存储 product_id 及其数量值(~10k 个产品):

Array
(
    [0] => stdClass Object
        (
            [ArticleId] => 1127
            [Quantity] => 7.00000
        )

    [1] => stdClass Object
        (
            [ArticleId] => 1401
            [Quantity] => 21.00000
        )

    [2] => stdClass Object
        (
            [ArticleId] => 1402
            [Quantity] => 2.00000
        )

    [3] => stdClass Object
        (
            [ArticleId] => 1406
            [Quantity] => 4.00000
        )
)

获取(查找或返回)按产品 ID 搜索的单个产品的数量值的最快方法是什么? 使用 $qty = array_search($product_id,$allStock); 是否明智? 例如,我想获得 1406 的数量: $qty = array_search(1406,$allStock);

【问题讨论】:

  • 你的 huge 数组有多大?一千万元素?一亿?请edit您的问题告诉我们;这对答案很重要。

标签: php arrays


【解决方案1】:

我是这样解决的:

$index = array_search($article->Id, array_column($stockValues, 'ArticleId'));
  $qty = $stockValues[$index]->Quantity;

【讨论】:

    【解决方案2】:

    您可以使用以下表达式:

    <?php
    
    $array = [
      (object) ['ArticleId' => 1127, 'Quantity' => 7.00000],
      (object) ['ArticleId' => 1401, 'Quantity' => 21.00000],
      (object) ['ArticleId' => 1402, 'Quantity' => 2.00000],
      (object) ['ArticleId' => 1406, 'Quantity' => 4.00000],
    ];
    
    // PHP >= 7.0 (https://i.stack.imgur.com/BEioZ.png)
    
    var_dump(
      array_search(1406, array_column($array, 'ArticleId')) // int(3)
    );
    
    // PHP < 7.0
    
    var_dump(
      array_filter(
        $array, 
        function ($item) { 
          return $item->ArticleId === 1406; 
        }
      )
    );
    
    // array(1) {
    //   [3]=>
    //   object(stdClass)#4 (2) {
    //     ["ArticleId"]=>
    //     int(1406)
    //     ["Quantity"]=>
    //     float(4)
    //   }
    // }
    

    https://replit.com/@w3lifer/MeagerBlissfulRobot

    【讨论】:

    • 嗨,对我来说,它给出了 bool(false)。 var_dump(array_search(1406, array_column($allStock, 'ArticleId')) // int(3) );
    • @RokasPaškevičius 你有什么 PHP 版本?
    • @RokasPaškevičius 对于 PHP5.6,它确实会返回 bool(false)sandbox.onlinephpfunctions.com/code/…
    • @RokasPaškevičius i.stack.imgur.com/BEioZ.png
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-14
    相关资源
    最近更新 更多