【问题标题】:Insert an array into another array on same values将一个数组插入另一个具有相同值的数组
【发布时间】:2022-01-25 19:11:38
【问题描述】:

我有这个数组:

阵列 1

Array
(
    [0] => Array
        (
            [required] => Tip:
        )    
    [1] => Array
        (
            [required] => Flux:
        )   
    [2] => Array
)

阵列 2

Array
(
    [0] => Array
        (
            [name] => Flux:
        )   
    [1] => Array
        (
            [name] => Tip:
        )   
    [2] => Array
        (
            [name] => Weight:
        )   
)

当 name 和 required 的值相同时,如何将数组 1 中的数据插入到数组 2 中。 来自数组的数据有时没有相同的名称值和必需值。 在数组 2 的输出中,我想在 required 值存在时显示一些内容。

我需要这个:

Array
(
    [0] => Array
        (
            [name] => Flux:
            [required] => Flux:
        )   
    [1] => Array
        (
            [name] => Tip:
            [required] => Tip:
        )    
    [2] => Array
        (
            [name] => Weight:
            [required] =>
        )    
)

我试过这个:

foreach($char as $key =>$value){
                foreach($mandatory as $key =>$val){     
                $data[] = array("name" => $value->charact_name, "required" => $val);                    
                }
            }

但不是我期望的输出!它向我显示了 name 和 required 的不同值

【问题讨论】:

  • 你试过了吗?请在问题中包含您的代码。

标签: php arrays


【解决方案1】:

这个问题不是技术问题,您需要多做一些尝试才能获得真正的算法。 我对你的代码做了一些修改。对于两个foreachs,$key 变量必须不同。根据您的问题,新密钥 required 刚刚添加到 $arr2

$arr1 = [['required' => 'Tip:'], ['required' => 'Flux:']];
$arr2 = [['name' => 'Flux:'], ['name' => 'Tip:'], ['name' => 'Weight:']];

foreach($arr2 as $key2 => $value2) {
    $arr2[$key2]['required'] = NULL;
    foreach($arr1 as $value1) 
        if($value2['name'] == $value1['required']) { 
            $arr2[$key2]['required'] = $value1['required'];
            break;
        }
}

【讨论】:

    【解决方案2】:

    我试过了:

    foreach($char as $key2 => $value2) {
                foreach($mandatory as $value1)              
                    if($value2->charact_name == $value1) { 
                        $data[] = array("name" => $value2->charact_name, "required" => $value1);    
                    }
            }
    

    但数据数组显示名称,并且只需要 $mandatory 数组中的值,我想显示来自 $char 的所有值,并且当值存在于 $mandatory 添加 [required]=> name 的值来自 $mandatory

    【讨论】:

    • 知道了!我在 if 和 data[] 中输入了$char->required = $value1; 我先输入了foreach,我得到了我的预期。谢谢@Amirreza Noori,我解决了这个问题!
    【解决方案3】:

    您可以简单地使用嵌套循环创建它,这会导致时间复杂度 O(n*m)。但是,如果您使用 Hashmap(具有键值的数组)进行 O(1) 搜索,您可以通过 O(n+m) 非常快速地创建它,如下所示:

    <?php
    $arr1 = array(0 => array('name' => 'Flux'),1 => array('name' => 'Tip'),2 => array('name' => 'Weight'));
    
    $arr2 = array(0 => array('required' => 'Tip'),1 => array('required' => 'Flux'),2 => array());
    
    
    $arrkey = array();
    
    foreach ($arr1 as  $ix=>$value) {
        $arrkey[$value['name']]=$ix;
    }
    
    $arr3 = $arr1;
    foreach ($arr2 as $elem) {
        if(!empty($elem) && array_key_exists($elem['required'],$arrkey)) {
            $arr3[$arrkey[$elem['required']]]['required'] = $elem['required'];
            
        }
    }
    
    
    print_r($arr3);
    
    ?>
    

    在线尝试demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-09
      • 2015-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多