【问题标题】:Find value from multidimensional array from given two values从给定的两个值中从多维数组中查找值
【发布时间】:2021-04-12 06:01:32
【问题描述】:

我有以下数组。

Array
(
    [0] => Array
        (
            [product] => p1
            [item] => q1
            [date] => d1
            [status] => N
        )

    [1] => Array
        (
            [product] => p2
            [item] => q2
            [date] => d2
            [status] => Y
        )

    [2] => Array
        (
            [product] => p1
            [item] => q3
            [date] => d3
            [status] => N
        )
)

从这个数组中,我想从上面给出给定产品和价值的日期。

例如,我将 product = p2 和 item = q2 作为字符串。现在从这个数组中,我想要这个数组中的一个日期,它有 product = p2 和 item = q2。

所以我需要上面例子的输出是:d2

我尝试了 array_column 和 array_search,但无法从 product 和 item 中找到价值。

请在 PHP 中帮我解决这个问题。

【问题讨论】:

    标签: php arrays multidimensional-array array-intersect array-column


    【解决方案1】:

    您可以迭代您的产品并使用 if 语句检查所需的条件。

    foreach ($products as $product) {
        if ('p2' === $product['product'] && 'q2' === $product['item']) {
            var_dump($product['date']);
        }
    }
    

    【讨论】:

      【解决方案2】:

      条件为字符串类型

      $strCond = "product = p2 and item = q2";
      

      给定的? 这被转换成一个可以更好处理的数组:

      parse_str(str_replace(' and ','&',$strCond),$cond);
      /*
      $cond = array (
        'product_' => " p2",
        'item_' => " q2",
      );
      */
      

      array_filter() 带有一个巧妙地使用 array_intersect_assoc() 的闭包来传递结果。

      $result = array_filter($input,function($row) use($cond){
        return array_intersect_assoc($cond, $row) === $cond;
      });
      

      结果:

      array (
        1 => 
        array (
          'product' => "p2",
          'item' => "q2",
          'date' => "d2",
          'status' => "Y",
        ),
      )
      

      通常,对于这样的多维数组,结果中总是有多个数据记录。您可以像这样获取第一条记录的日期:

      $firstDate = reset($result)['date'];  //d2
      

      注意:该算法取自 PHP 类 tableArray

      使用此类解决的一种方法:

      $result = tableArray::create($input)
        ->filterEqual($cond)
        ->fetchRow()
      ;
      /*
      $result = array (
        'product' => "p2",
        'item' => "q2",
        'date' => "d2",
        'status' => "Y",
      )
      */
      

      【讨论】:

        猜你喜欢
        • 2015-09-28
        • 1970-01-01
        • 1970-01-01
        • 2016-11-10
        • 2019-10-28
        • 1970-01-01
        • 2015-10-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多