Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从给定的两个值中从多维数组中查找值_Php_Arrays_Multidimensional Array_Array Intersect_Array Column - Fatal编程技术网

Php 从给定的两个值中从多维数组中查找值

Php 从给定的两个值中从多维数组中查找值,php,arrays,multidimensional-array,array-intersect,array-column,Php,Arrays,Multidimensional Array,Array Intersect,Array Column,我有以下数组 Array ( [0] => Array ( [product] => p1 [item] => q1 [date] => d1 [status] => N ) [1] => Array ( [product] => p2 [item

我有以下数组

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_列和array_搜索,但无法从product和item中找到值


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

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

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

这些条件以类型字符串的形式显示

$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类

使用本课程解决问题的一种方法:

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