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",
)
*/