Php 基于数组值的实例匹配多维数组,并仅返回1个结果
我需要能够根据行值的实例匹配数组,并且只返回1个结果 我不确定我的措辞是否正确,所以让我解释一下 例如,假设我有两个数组Php 基于数组值的实例匹配多维数组,并仅返回1个结果,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我需要能够根据行值的实例匹配数组,并且只返回1个结果 我不确定我的措辞是否正确,所以让我解释一下 例如,假设我有两个数组 $people = array( array( 'name' => 'Joe', 'DOB' => '01/01/1990' ), array( 'name' => 'John', 'DOB' => '01/01/1990' ), array(
$people = array(
array(
'name' => 'Joe',
'DOB' => '01/01/1990'
),
array(
'name' => 'John',
'DOB' => '01/01/1990'
),
array(
'name' => 'Jane',
'DOB' => '01/01/1990'
)
);
$sales = array(
array(
'name' => 'Car',
'price' => '1000.00',
'note' => 'This sale was made by Joe Bloggs'
),
array(
'name' => 'Car 2',
'price' => '2000.00',
'note' => 'Joe Bloggs sold this car today'
),
array(
'name' => 'Car 3',
'price' => '3000.00'
'note' => 'Jane Smith sold our most expensive car'
)
);
foreach($people as $personKey => $person){
foreach($sales as $saleKey => $sale){
if($sale['name'] == $person['name']){
if($sale['price'] > 1000.00){
$person[$personKey]['highestSale'] == $saleKey;
} else {
$person[$personKey]['highestSale'] == $saleKey;
}
}
}
}
我希望能够运行foreach循环,但使用它可以实现两件事
$sales['seller']
字符串,如果它包含$people['name']
(Joe将与Joe Bloggs匹配)如果($sale['price']>1000.00)
为真,则退出person循环的这个实例,并转到下一个人(每个人只返回1个结果/匹配)if
语句为true,我需要它退出当前循环,并移动到下一行,因此我的结果将如下所示
“乔的最高销售额为2000.00英镑”
“Jane的最高销售额为3000.00英镑”
“约翰的最高销售额为0.00英镑”
很抱歉,如果这不合理,很难解释我想要达到的目标!如果有什么需要重新解释的,请询问。//收集姓名
// Collect names
$person = array_fill_keys(array_column($people, 'name'), [0]);
// Add all sales to each seller
foreach($sales as $saleKey => $sale){
if($sale['price'] > 1000.00) {
$person[explode(' ', $sale['seller'])[0]][] = $sale['price'];
}
}
// Print names and max value
foreach($person as $k=>$v) {
echo $k ."'s highest sale is £" . max($v) ."<br>\n";
}
$person=array\u fill\u键(array\u列($people,'name'),[0]);
//将所有销售添加到每个卖家
foreach($saleKey=>$sale的销售额){
如果($sale['price']>1000.00){
$person[explode(“”,$sale['seller'])[0][]=$sale['price'];
}
}
//打印名称和最大值
foreach($k=>$v){
echo$k.“.的最高销售额为.”.max($v)。“
\n”;
}
首先按价格降序排列销售额
usort($sales, function($a, $b) {
return $b['price'] <=> $a['price'];
});
usort($sales,function($a,$b){
返回$b['price']$a['price'];
});
然后,当您迭代这些人时,您可以打印sales数组中的第一个匹配项,这将是他们的最高销售额。如果没有匹配项,则其最高销售额为0
foreach ($people as $person) {
$highest = '0.00'; //default to 0
foreach ($sales as $saleKey => $sale) {
if (strpos($sale['note'], $person['name']) !== false) {
$highest = $sale['price'];
break; //stop after 1st match
}
}
echo "$person[name]'s highest sale is £$highest<br>";
}
foreach($people作为$person){
$highest='0.00';//默认值为0
foreach($saleKey=>$sale的销售额){
if(strpos($sale['note'],$person['name'])!==false){
$highest=$sale[‘价格’];
中断;//第一场比赛后停止
}
}
echo“$person[name]的最高销售额为:$highest
”;
}
老实说,我不确定>1000个因素是如何包含进去的。数组是db查询的结果?不,数组是使用laravel excel从excel电子表格中构建的。您希望从第一个数组中获得什么数据?看起来,第二个是enough@splash58我的目标是尽我所能匹配这两个阵列。因此,对于第一个数组中的每一行,我想循环第二个数组中的每一行,找到与卖家名称最匹配的结果,并返回值最高的一行。我不能这样做。我必须运行人员数组的循环,并检查所有卖家是否存在任何销售。很抱歉,我解释错了,但这样做会错过所有的
John
。如果john没有销售,我仍然需要为john返回no sales
。