【问题标题】:Add field to an array where we map the company_id将字段添加到我们映射 company_id 的数组中
【发布时间】:2021-07-16 08:12:00
【问题描述】:

我有这个数组,我需要在其中添加带有 company_count 的另一个字段 - 我从另一个数组中获取该字段,但问题是当我这样做时,如果我在 company_number 中有 5 个结果,因为我正在取消设置它们当我合并两个数组时,我将只有 5 个结果。 使用这个 foreach 我只是抓取元素并添加前 5 个结果。

其余的数组示例在这里 https://pastebin.com/LbkmXmMt

如您所见,当我合并两个数组时,我仅在前 5 个结果中有 company_number,现在我需要添加 第一个数组

array (
  0 => 
  array (
    'id' => '90557',
    'company_id' => '1537',
  ),
  1 => 
  array (
    'id' => '71619',
    'company_id' => '257',
  ),
  2 => 
  array (
    'id' => '87818',
    'company_id' => '7865',
  ),
  3 => 
  array (
    'id' => '87824',
    'company_id' => '7865',
  ),
  4 => 
  array (
    'id' => '87821',
    'company_id' => '7865',
  ),
  5 => 
  array (
    'id' => '52912',
    'company_id' => '11682',
  ),
  6 => 
  array (
    'id' => '85963',
    'company_id' => '2485',
  ),
  7 => 
  array (
    'id' => '80716',
    'company_id' => '2485',
  ),
  8 => 
  array (
    'id' => '79529',
    'company_id' => '2485',
  ),
)
array (
  0 => 
  array (
    'company' => '1537',
    'company_number' => '1091',
  ),
  1 => 
  array (
    'company' => '257',
    'company_number' => '111',
  ),
  2 => 
  array (
    'company' => '7865',
    'company_number' => '33',
  ),
  3 => 
  array (
    'company' => '11682',
    'company_number' => '18',
  ),
  4 => 
  array (
    'company' => '2485',
    'company_number' => '165',
  ),
)

如果我的结果具有相同的公司 ID,我需要添加相同的 company_number。 例如,公司 id = 7865 的数组应该有 company_number = 33,三倍。

我需要这样的结果

array (
  0 => 
  array (
    'id' => '90557',
    'company_id' => '1537',
    'company_number' => '1091'
  ),
  1 => 
  array (
    'id' => '71619',
    'company_id' => '257',
    'company_number' => '111'
  ),
  2 => 
  array (
    'id' => '87818',
    'company_id' => '7865',
    'company_number' => '33'
  ),
  3 => 
  array (
    'id' => '87824',
    'company_id' => '7865',
    'company_number' => '33'
  ),
  4 => 
  array (
    'id' => '87821',
    'company_id' => '7865',
    'company_number' => '33'
  ),
  5 => 
  array (
    'id' => '52912',
    'company_id' => '11682',
    'company_number' => '18'
  ),
  6 => 
  array (
    'id' => '85963',
    'company_id' => '2485',
    'company_number' => '165'
  ),
  7 => 
  array (
    'id' => '80716',
    'company_id' => '2485',
    'company_number' => '165'
  ),
  8 => 
  array (
    'id' => '79529',
    'company_id' => '2485',
    'company_number' => '165'
  ),
)
$test = array();    
        foreach($individual as $value){
            foreach($value as $j => $users) {
                foreach($company_numbers as $key => $company_num) {
                    if($users['company_id'] == $company_num['company']) {
                        
                        $test[]['company_number'] = $company_num['company_id'];
                        $test[] = $users;
                    }
                }   
            }
        }
array(18) {
  [0]=>
  array(1) {
    ["company_number"]=>
    string(4) "1091"
  }
  [1]=>
  array(18) {
    ["id"]=>
    string(5) "90557"
    ["company_id"]=>
    string(4) "1537"

  }

需要在同一个数组中

【问题讨论】:

  • 请提供正确的minimal reproducible example 您的问题。您那里的数组包含许多项目,这些项目似乎与当前问题无关 - 所以请删除这些项目,这将使这个问题更容易理解,如果我们不必对这么多混乱进行排序。
  • 需要将我的第二个数组中的公司与第一个数组中的 company_id 映射并添加 company_number
  • 已编辑,现在它只是我在这种情况下需要的数据。
  • 再次,请提供一个正确的 minimal reproducible example,而不是“这里的代码,那里的数组——你们拼凑起来”。您当前显示这些数组的方式,我们甚至不能只是复制和粘贴它们,因为那不是有效的 PHP 代码。 (提示:var_export 可以从数组等数据结构中生成有效的 PHP 代码。)

标签: php multidimensional-array


【解决方案1】:

我想你想做这样的事情。

首先,您需要使用 ID 循环数组。

$companyIds = [
   ['company_id' => 1537],
   ['company_id' => 250],
   ['company_id' => 250]
];

$companyNumbers = [
   ['company' => 1537, 'company_number' => 33],
   ['company' => 250, 'company_number' => 100],
];

foreach ($companyIds as $key => $id) {
  foreach ($companyNumbers as $numbers) {
    if ($id['company_id'] == $numbers['company']) {
        $companyIds[ $key ]['company_number'] = $numbers['company_number'];
    }
  }
}

如果您将公司 ID 添加为公司编号数组中每个条目的键,则更简单:

$companyIds2 = [  
    ['company_id' => 1537],
    ['company_id' => 250],
    ['company_id' => 250],
];

$companyNumbers2 = [
    1537 => ['company' => 1537, 'company_number' => 33],
    250  => ['company' => 250, 'company_number' => 100],
];

foreach ($companyIds2 as $key => $id) {
    if (array_key_exists( $id['company_id'], $companyNumbers2 )) {
        $companyIds2[ $key ]['company_number'] = $companyNumbers2[$id['company_id']]['company_number'];
    }
}

我希望这就是您正在寻找的答案。

【讨论】:

  • 在我原来的帖子中添加了这个例子的结果
  • 问题是现在我正在为 company_number @elzorro 创建一个新数组
  • 找到了让它发挥作用的方法,但你的提议让我走上了正轨。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-26
  • 2019-12-07
  • 1970-01-01
  • 2021-10-10
  • 2021-06-03
  • 2012-01-23
  • 1970-01-01
相关资源
最近更新 更多