2

我有以下数组。

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 但无法从产品和项目中找到价值。

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

4

2 回答 2

2

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

foreach ($products as $product) {
    if ('p2' === $product['product'] && 'q2' === $product['item']) {
        var_dump($product['date']);
    }
}
于 2021-01-06T13:31:30.243 回答
0

条件为类型的字符串

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

给?这被转换为可以更好地处理的数组:

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

带有巧妙使用 array_intersect_assoc() 的闭包的 array_filter() 提供了结果。

$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",
)
*/
于 2021-01-07T19:18:43.453 回答