2016-04-13 3 views
-2

Итак, у меня есть 2 массива.для многомерного массива цикла

$ массив1:

Array ([maxwater] => 1 [maxfodder] => 2 [maxmob] => 3 [maxalt] => 4 [maxhum] => 5 [mintemp] => 6) 

И второй является многомерный массив:

Array 

( [0] => Массив ( [0] => 2 [1 ] => 3 [2] => 4 [3] => 4 [4] => 1 [5] => 2)

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

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

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

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

То, что я хочу сделать здесь только разделить каждое число в $array1 каждой колонке в $array2, например, за $ array1 = 1 разделит столбец 1 (2 3 4 3 1) в $ массив2, $ array1 = 2 разделит столбец 2 (3 2 1 4 2) и так далее.

И я уже попробовать использовать этот код, и появляется сообщение об ошибке:

Notice: Undefined offset: 0 in C:\xampp\htdocs\Livestockmapping\dsssawprocess.php on line 42
Warning: Division by zero in C:\xampp\htdocs\Livestockmapping\dsssawprocess.php on line 42 0 Code:

$yaxis = sizeof($array2); 
$xaxis = max(array_map('count', $array2)); 

echo $xaxis; 
echo $yaxis; 

//normalization 
for($i=0; $i < $xaxis; $i++) 
{ 
    for($j=0; $j < $yaxis; $j++) 
    { 
     $c1norm = round($array2[$i][$j]/$array1[$j]); 
     echo $c1norm; 
    } 
} 

Может кто-то помочь мне найти правильный способ сделать это?

* редактировать: Я пытаюсь использовать:

foreach($array1 as $v){ 
echo (array_sum(array_column($array2, $v - 1))/$v) . "<br />"; 
} 

Окажись результат, как этот

Array 
(
    [0] => 13 
    [1] => 6 
    [2] => 3.6666666666667 
    [3] => 3.5 
    [4] => 1.4 
    [5] => 2.3333333333333 
) 

Но что я хочу, чтобы разделить каждое значение массив2:

2/1 = 2 
3/1 = 3 
4/1 = 4 
3/1 = 3 
1/1 = 1 


3/2 = 2 
2/2 = 1 
1/2 = 1 
4/2 = 2 
2/2 = 1 


4/3 = 1 
1/3 = 0 
2/3 = 1 
2/3 = 1 
2/3 = 1 

и т.д ..

+0

Пожалуйста, покажите нам структура массива с 'print_r ($ yourArray);' для обоих массивов. – Rizier123

+0

$ array1 = ([maxwater] => 1 [maxfodder] => 2 [maxmob] => 3 [maxalt] => 4 [maxhum] => 5 [mintemp] => 6) – lacyeex

+0

'array1' имеет числа' (1-6) ',' array2' имеет только строки '5', в какой строке на' array2' вы делите последний номер '6' внутри array1 – Ghost

ответ

1

Прямо сейчас вы делите элементы на основе матрицы $array2.

Включите for петлю $array1 (каждый из него) и применить его на каждой колонке $array2

$array2[$j][$i] 
     ^column first 

Пример:

// $array1 = array_values($array1); numeric index conversion 
$c = count($array1); 
$xaxis = sizeof($array2); 
$yaxis = max(array_map('count', $array2)); 

// normalization 
for($i = 0; $i < $c; $i++) { 
    for($j = 0; $j < ($yaxis - 1); $j++) { 
     $c1norm = round($array2[$j][$i]/$array1[$i]); 
     echo $c1norm; 
    } 
} 

Demo

+0

$ array1 [$ i] будет пустым, не так ли?проверьте структуру $ array1 – Atiqur

+1

Пример @Atiqur здесь использует 'array (1, - 6)', который был предыдущим сообщением, OP изменил его, так или иначе, я просто добавлю 'array_values' в микс, чтобы переформатировать всю индексацию массива на '$ array1' – Ghost

+0

@Ghost привет, ваш код как раз то, что я хочу, но я продолжаю получать ту же ошибку, что и то, что уже упоминалось выше. :) – lacyeex

0
$indexLevelOne = count($array2); 
$indexLevelTwo = count($array2[0]); 

// normalization 
$k=0; 
foreach($array1 as $v){ 
    for($j=0; $j<$indexLevelTwo; $j++){ 
     if($j != $k) continue; 
     for($i=0; $i<$indexLevelOne; $i++){ 
      $c1norm = round($array2[$i][$j]/$v); 
      echo $array2[$i][$j] . "/" . $v . " = " . $c1norm, "\n"; 
     } 
     echo "\n\n"; 

    } 
    echo "\n\n"; 
    $k++; 
} 
+0

Хотя этот фрагмент кода может решить вопрос, [включая объяснение] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) действительно помогает улучшить качество вашего после. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин вашего предложения кода. Также попробуйте не толковать код с пояснительными комментариями, что уменьшает читаемость кода и объяснений! – Rizier123

Смежные вопросы