2016-04-14 5 views
-2

Полный новичок здесь.Многомерные массивы через функции (PHP)

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

$main_array = array(
$sub_array1('name','value1','value2'), 
$sub_array2('name','value1','value2'), 
$sub_array3('name','value1','value2') 
); 

... и функция пользователя:

function multiply($a, $b) { 
$result = $a * $b}; 
return $result; 
}; 

Что лучший способ цикла каждого суб-массив с помощью функции таким образом, что $ a - значение1, а $ b - value2? Как я могу получить результаты, чтобы выглядеть примерно так:

name1: Result1

Имя2: result2

name3: result3

В настоящее время я возился со следующим:

foreach($main_array as $x) { 
print_r(multiply($x['value1'], $x['value2'])); 
}; 

... что неверно в синтаксисе, логике или обоим.

+0

, что массив не является действительным –

+0

Спасибо за исправление; $ была опечаткой.То, как я это делаю сейчас, - это то, как прокомментировал Ник Марден. –

ответ

0

print_r отображает читаемую версию переменной, такую ​​как объект, массив и т. Д. Так как вы перебираете массив для отображения значения в определенном формате - это не сработает.

Чтобы получить желаемый результат, требуется простое изменение:

foreach($main_array as $x) { 

    echo $x['name'] . multiply($x['value1'], $x['value2']); 

}; 

Или канава определенного пользователя функции «умножение» для основной математики.

foreach($main_array as $x) { 

    echo $x['name'] . ($x['value1'] * $x['value2']); 

}; 

Edit:

Также к точке Дагона выше в комментариях - массив, который вы используете, не действует. Синтаксис неверен, и вы не используете именованные ключи, но ссылаетесь на них. Измените структуру следующим образом:

$name = "Value"; 
$value = 10;  

$main_array = array(
     array('name' => $name, 'value1' => $value, 'value2' => $value), 
     array('name' => $name, 'value1' => $value, 'value2' => $value), 
     array('name' => $name, 'value1' => $value, 'value2' => $value), 
    ); 

Альтернативно, если вы хотите сделать его более читаемым.

$nameValue = "test"; 
$value1 = 10; 
$value2 = 10; 

$subArray1 = [ 
     "name" => $nameValue, 
    "value1" => $value1, 
    "value2" => $value2 
]; 

$subArray2 = [ 
    "name" => $nameValue, 
    "value1" => $value1, 
    "value2" => $value2 
]; 

$subArray3 = [ 
    "name" => $nameValue, 
    "value1" => $value1, 
    "value2" => $value2 
]; 

$main_array = array($subArray1, $subArray2, $subArray3); 

Обновление для дополнительной полноты & предполагающего использование пользовательской функции умножения

+0

'Примечание: неопределенный индекс: name' &' Fatal error: Uncaught Error: Call to undefined function multiply() ' – RiggsFolly

+0

он исправил мое исправление –

+0

И где все эти' $ nameValue' '$ value1' и т. Д., Исходящие от – RiggsFolly

0

Сначала ваше создание массива неверно

$main_array = array(
        array('fred','1','2'), 
        array('bill','3','4'), 
        array('jane','5','6') 
); 

Теперь этот массив может быть обработан, как это и суб массивы, которые не являются ассоциативными массивами и поэтому не являются типами имен-> значений, которые должны обрабатываться с использованием их индексов

foreach ($main_array as $sub_array) { 
    echo $sub_array[0] , ' = ' . ($sub_array[1] * $sub_array[2]); 
} 

И будет производить вывод:

fred = 2 
bill = 12 
jane = 30 

Note: print_r() is used to display arrays & onjects, you need to use echo or print to display scalar values.

Also there is no multiply function, just use old fashioned maths eg $x * $y

+0

Да, $ в sub_array была опечаткой, спасибо за исправление. Функция умножения является всего лишь примером того, что я сейчас создаю, принимает аргументы и в основном (100-abs ($ form_answer1- $ a)) + (100-abs ($ form_answer2- $ b)). Независимо от того, как вы могли бы получить значения sub-array, проходящие через такую ​​функцию? –

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