[英]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設置的值是什么,只是有一個值。
進一步閱讀
代碼筆
該解決方案有效且易於理解,因為 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.