簡體   English   中英

如何根據特定索引映射兩個數組?

[英]How can I map two arrays based on specific indexes?

Array1 ( [0] => [1] => [2] => 3 [3] => [4] => 5 [5] => [6] => )
Array2 ( [0] => URD [1] => ISL )

我想將$array2值映射到$array1索引(那些具有值 3 和 5 的索引),我想得到一個這樣的數組:

Array ( [0] => [1] => [2] => URD [3] => [4] => ISL [5] => [6] => )

我嘗試了以下方法:

$newArray = array_values(array_filter(array_merge($array1,$array2)));

但實際結果是:

Array([0] => 3[1] => 5[2] => URD[3] => ISL)

預期的結果應該是:

Array ( [0] => [1] => [2] => URD [3] => [4] => ISL [5] => [6] => )

代碼

請嘗試以下操作:

<?php

$array1 = ["", "", "3", "", "5", "", ""];
$array2 = ["URD", "ISL"];

foreach($array1 as $id => $a1){
    //for each item in array 1

    if($a1){
        //if the array 1 item has a value

        $array1[$id] = array_shift($array2);
        //replace it with an item from array 2
    }

    if(empty($array2)){
        //if there are no more values left to share in array 2, stop
        break;
    }
}

var_dump($array1);

輸出

array(7) {
  [0]=>
  string(0) ""
  [1]=>
  string(0) ""
  [2]=>
  string(3) "URD"
  [3]=>
  string(0) ""
  [4]=>
  string(3) "ISL"
  [5]=>
  string(0) ""
  [6]=>
  string(0) ""
}

注意事項

該方法假定數組 1 和數組 2 中都有值。

一旦數組 2 中的值被拆分並且數組 2 為空,具有設置值的數組 1 項將不再受到影響。

該方法並不關心在陣列1設置的值是什么,只是一個值。

進一步閱讀

foreach()

數組移位()

代碼筆

https://3v4l.org/RDQY6

該解決方案有效且易於理解,因為 OPS 要求...

 <?

    $array1 = ["", "", "3", "", "5", "", ""];
    $array2 = ["URD", "ISL"];

    $i =0;
        foreach($array1 as $keys=>$values) {
            if($values == 3 || $values ==5) {
               if(isset($array2[$i])){
                $array1[$keys] = $array2[$i];
                  $i++;
             }else { break; }
           }
         }
    print_R($array1);
    ?>

它將在 5 和 3 出現的任何地方替換數組 1 值中的數組 2 值,這與它們的排序順序無關。 例子

$array1 = ["5", "", "3", "", "", "", ""]; 將被轉換為

$array1 = ["URD", "" ,"ISL","","",""];

如果你想要它像 3 這樣的順序應該總是先出現然后首先對 array1 進行排序然后使用我的代碼...如果你想要 3 應該由 URD 替換而 5 應該由 ISL 替換那么你如果 codition 會有所不同

只是另一種方式來做到這一點......(未經測試,但它應該有效)

<?php

$a = array ( 0 => '', 1 => '', 2 => 3, 3 => '', 4 => 5, 5 => '', 6 => '' );

$b = array ( 0 => 'URD', 1 => 'ISL' );

$c = array_replace ( $a, array_combine ( array_keys ( array_filter ( $a ) ), $b ) );

print_r ( $c );

?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM