Php 基于数组值的实例匹配多维数组,并仅返回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(

我需要能够根据行值的实例匹配数组,并且只返回1个结果

我不确定我的措辞是否正确,所以让我解释一下

例如,假设我有两个数组

  $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循环,但使用它可以实现两件事

  • 我需要能够搜索第二个foreach循环,只通过当前的名字。我需要它能够搜索
    $sales['seller']
    字符串,如果它包含
    $people['name']
    (Joe将与Joe Bloggs匹配)

  • 我还需要它只在这个循环中优先于第一个结果。因此,
    如果($sale['price']>1000.00)
    为真,则退出person循环的这个实例,并转到下一个人(每个人只返回1个结果/匹配)

  • 现在它会回来

    “乔的最高销售额为2000.00英镑”

    “乔的最高销售额为1000.00英镑”

    “Jane的最高销售额为3000.00英镑”

    “约翰的最高销售额为0.00英镑”

    在循环中,if语句运行的地方,如果
    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