我有2个阵列:
$s_array: Array
(
[0] => Array
(
[field_1] => S. Miguel
[field_2] => Continente
[valor] => 0
)
[1] => Array
(
[field_1] => S. Miguel
[field_2] => Guarita
[valor] => 0
)
[2] => Array
(
[field_1] => S. Miguel
[field_2] => Manteiga
[valor] => 0
)
[3] => Array
(
[field_1] => S. Miguel
[field_2] => Solmar
[valor] => 0
)
[4] => Array
(
[field_1] => Terceira
[field_2] => Continente
[valor] => 0
)
[5] => Array
(
[field_1] => Terceira
[field_2] => Guarita
[valor] => 0
)
[6] => Array
(
[field_1] => Terceira
[field_2] => Manteiga
[valor] => 0
)
[7] => Array
(
[field_1] => Terceira
[field_2] => Solmar
[valor] => 0
)
)
和
$r_array: Array
(
[0] => Array
(
[field_1] => S. Miguel
[field_2] => Continente
[valor] => 185
)
[1] => Array
(
[field_1] => S. Miguel
[field_2] => Manteiga
[valor] => 208
)
[2] => Array
(
[field_1] => S. Miguel
[field_2] => Solmar
[valor] => 187
)
[3] => Array
(
[field_1] => Terceira
[field_2] => Continente
[valor] => 192
)
[4] => Array
(
[field_1] => Terceira
[field_2] => Guarita
[valor] => 199
)
)
我需要做的是更改key [valor]
上$s_array
的值,并使用key [valor]
上$r_array
的值,以防其他键[field_1]和[field_2]在两个数组上都有相同的值。
感谢您的帮助。
答案 0 :(得分:0)
试试这个应该没问题,两个数组必须大小相同
<?php
for($i=0 ; $i<count($s_array) ; $i++){
$s_element = $s_array[$i];
$r_element = $r_array[$i];
if(($s_element["field_1"]==$r_element["field_1"]) && ($s_element["field_2"]==$r_element["field_2"]) ){
$s_array[$i]["valor"] = $r_array[$i]["valor"]
}
}
?>
答案 1 :(得分:0)
for($i=0 ; $i<count($s_array) ; $i++) {
$s_element = $s_array[$i];
$r_value = 0;
for($z=0 ; $z<count($r_array) ; $z++) {
$r_element = $r_array[$z];
if(($s_element["field_1"]==$r_element["field_1"]) && ($s_element["field_2"]==$r_element["field_2"]) ) {
$r_value = $r_element["valor"];
}
if($r_value != 0) {
$s_array[$i]["valor"] = $r_value;
}
}
}
答案 2 :(得分:0)
这是一个运行时成本为:
的程序两次通过......
即。运行时间与输入数组的大小以及创建“查找”的成本成正比。阵列。
小阵列并不便宜。
代码:
<?php
// see http://phillihp.com/toolz/php-array-beautifier/ (takes an array or object output in PHP, such as a print_r() statement and formats it to be easily readable)
$s = unserialize('a:8:{i:0;a:3:{s:7:"field_1";s:9:"S. Miguel";s:7:"field_2";s:10:"Continente";s:5:"valor";s:1:"0";}i:1;a:3:{s:7:"field_1";s:9:"S. Miguel";s:7:"field_2";s:7:"Guarita";s:5:"valor";s:1:"0";}i:2;a:3:{s:7:"field_1";s:9:"S. Miguel";s:7:"field_2";s:8:"Manteiga";s:5:"valor";s:1:"0";}i:3;a:3:{s:7:"field_1";s:9:"S. Miguel";s:7:"field_2";s:6:"Solmar";s:5:"valor";s:1:"0";}i:4;a:3:{s:7:"field_1";s:8:"Terceira";s:7:"field_2";s:10:"Continente";s:5:"valor";s:1:"0";}i:5;a:3:{s:7:"field_1";s:8:"Terceira";s:7:"field_2";s:7:"Guarita";s:5:"valor";s:1:"0";}i:6;a:3:{s:7:"field_1";s:8:"Terceira";s:7:"field_2";s:8:"Manteiga";s:5:"valor";s:1:"0";}i:7;a:3:{s:7:"field_1";s:8:"Terceira";s:7:"field_2";s:6:"Solmar";s:5:"valor";s:1:"0";}}');
$t = unserialize('a:5:{i:0;a:3:{s:7:"field_1";s:9:"S. Miguel";s:7:"field_2";s:10:"Continente";s:5:"valor";s:3:"185";}i:1;a:3:{s:7:"field_1";s:9:"S. Miguel";s:7:"field_2";s:8:"Manteiga";s:5:"valor";s:3:"208";}i:2;a:3:{s:7:"field_1";s:9:"S. Miguel";s:7:"field_2";s:6:"Solmar";s:5:"valor";s:3:"187";}i:3;a:3:{s:7:"field_1";s:8:"Terceira";s:7:"field_2";s:10:"Continente";s:5:"valor";s:3:"192";}i:4;a:3:{s:7:"field_1";s:8:"Terceira";s:7:"field_2";s:7:"Guarita";s:5:"valor";s:3:"199";}}');
// var_dump($s, $t);
/*
* Allow quick lookup of matching key from $t to $s by storing
* a single key to the array index so we can do fast lookup and update.
*/
$mapSKeyToIdx = array();
/**
* Two pass approach that that does not require sorted arrays.
*/
/**
* First pass: create a 'lookup map' that allows easy matching of keys and accessing the related
* array entry quickly.
*
* I will use a 'hash' of the key and store the 'index' of the entry...
*/
foreach ($s as $key => $entry) {
$mapSKeyToIdx[makeKey($entry['field_1'], $entry['field_2'])] = $key;
}
/*
* Second pass: Transfer 'valor' values from array $t to array $s.
*
* Make it clear what i happening...
*/
foreach ($t as $entry) {
// current entry
$tFieldKey = makeKey($entry['field_1'], $entry['field_2']);
$tValor = $entry['valor'];
// set values in array $s if the current $t key exists in $s...
// we check via the $mapSKeyToIdx array to provide quick access
if (array_key_exists($tFieldKey, $mapSKeyToIdx)) { // matching entry ...
$s[$mapSKeyToIdx[$tFieldKey]]['valor'] = $tValor;
}
}
// var_dump($mapSKeyToIdx);
print_r($s);
exit;
// --------------------------------------------------------------------------
function makeKey($field1, $field2)
{
return md5($field1 .'|'. $field2);
}