У меня есть многомерный массив:Как условно объединить многомерный массив
Array
(
[10] => Array
(
[from] => Jack
[to] => Terry
[Bribe] => 0
[Joke_Payment] => 0
[Corrupt_Support] => 1
[Legitimate_Support] => 0
[Obfuscation] => 1
[Legal_Enforcement] => 0
[Whistleblower] => 0
)
[11] => Array
(
[from] => Terry
[to] => Jack
[Bribe] => 0
[Joke_Payment] => 0
[Corrupt_Support] => 1
[Legitimate_Support] => 0
[Obfuscation] => 0
[Legal_Enforcement] => 1
[Whistleblower] => 0
)
)
Я хочу, чтобы обновить выше массив нравится: есть 1 (идущий from
от to
к) и а -1 для противоположного направления, 2 означают для «обоих направлениях.
Array ( [10] => Array
(
[from] => Jack
[to] => Terry
[Bribe] => 0
[Joke_Payment] => 0
[Corrupt_Support] => 2
[Legitimate_Support] => 0
[Obfuscation] => 1
[Legal_Enforcement] => -1
[Whistleblower] => 0
) }
Как я могу во-первых, рассчитать их пересекаются, а затем обновить исходный массив?
Они будут иметь одинаковую сумму с ключами, а когда from
соответствует to
, а to
соответствует from
элементам, я хочу объединить эти два массива в один. A '1' используется для обозначения того, что свойство относится к направлению from
к to
, а -1
указывает, что свойство переходит в обратном направлении (от до from
).
Мой текущий код:
$fileRelation = explode("\r", $end);
$rowsRelation = array_map('str_getcsv', $fileRelation);
$headerRelation = array_shift($rowsRelation);
$csvArrRelation = array();
$countR = count($headerRelation);
foreach ($rowsRelation as $key => &$row) {
$index = 2;$sum = 0;$sumArr = array();
while ($index < $countR) {
if ($row[$index]>0) {
$sumArr[$sum]=$index; //store row $headerRelation index
$sum++;
}
$index++;
}
if($sum > 0){ //remove element if no relationship exist
foreach ($csvArrRelation as $k => $a) {
if (in_array($row[0], $csvArrRelation[$k]) && in_array($row[1], $csvArrRelation[$k])){
$p = array_values($a);$i = 2;$cp= count($p);
while($i < $cp){
if($row[$i] == $p[$i]){
$a[$headerRelation[$i]] += $row[$i];
}else{
$a[$headerRelation[$i]] -= $row[$i];
}
$i++;
}
unset($rowsRelation[$key]);
}
}
$csvArrRelation[] = array_combine($headerRelation, $row);
}
}
Вы можете обновить ваш вопросы с некоторыми реальными данными, то есть для $ countR и $ csvArrRelation, просто простые примеры. Было бы легче кому-то помочь вам, если он будет знать структуру данных. Что значит «пересекаться»?Я не могу найти связь между этими двумя массивами и желаемым результатом, поэтому, если можно, объясните это немного лучше. Обратите внимание, что существует функция array_intersect, которая вычисляет пересечение массивов. Http://php.net/manual/en/function.array-intersect.php – Whirlwind
Являются ли массивы гарантированными всегда одинаковыми и одинаковыми количествами ключей? Почему он начинается с '10'? Похоже, что PHP - это неправильное место для этого. – DanMan
Да, они будут иметь одинаковую сумму с ключами, а когда от совпадений до и до совпадений с элементом, я хочу объединить остальные элементы. В качестве примера я нахожу эту часть, поэтому она начинается с 10 – Blair