То, что я пытаюсь сделать, я не знаю правильного имени, поэтому извиняюсь, если я использовал неправильную терминологию.
Вот основной пример того, чего я пытаюсь достичь:
$arrayData = (4,5,6,7,8,9,10);
$public function setArray($colNum){
$i = 0;
while($i < count($arrayData){
Здесь я не знаю, что делать. Я хочу, чтобы $ colNum устанавливал количество столбцов в новом массиве. так
if $colNum = 4, then $arrayNew[$i][$i][$i][$arrayData[$i]
тогда будет установлено. В настоящее время я создал несколько функций, каждый из которых обрабатывает различное количество столбцов, и это работает, но может варьироваться от 2 до 30 столбцов, и я знаю, что должен быть способ сделать это более эффективно.
Здесь приведен рабочий пример таблицы с четырьмя столбцами (код еще не оптимизирован)
public function parseTable($tableHeader,$isMoney,$colNum) {
$tableData = $this->myArray;
$count = 0;
$placeHolder = 0;
while($count < count($tableData)){
// This hides the column headers
if($count > $colNum - 1) {
$col1Array[$placeHolder] = $tableData[$count];
$col2Array[$placeHolder] = $tableData[$count + 1];
$col3Array[$placeHolder] = $tableData[$count + 2];
$col4Array[$placeHolder] = $tableData[$count + 3];
$placeHolder ++;
}
$count = $count + $colNum;
}
// Remove the empty lines from the array
$col1Array = array_values(array_filter($col1Array));
$col2Array = array_values(array_filter($col2Array));
$col3Array = array_values(array_filter($col3Array));
$col4Array = array_values(array_filter($col4Array));
// Put the 0 back in the array
$col1Array = array_values(str_replace('~',0,$col1Array));
$col2Array = array_values(str_replace('~',0,$col2Array));
$col3Array = array_values(str_replace('~',0,$col3Array));
$col4Array = array_values(str_replace('~',0,$col4Array));
$count = 0;
$tableHTML = "<table class=\"table table-striped table-hover\" data-toggle=\"table\"
data-search=\"true\"
data-show-columns=\"true\"
data-pagination=\"true\"
>
<thead>
<tr>
<th>$tableHeader[0]</th>
<th>$tableHeader[1]</th>
<th>$tableHeader[2]</th>
<th>$tableHeader[3]</th>
</tr>
</thead>
<tbody>";
while($count < count($col1Array)){
// Replaces empty values with the text set when calling the function
if($col1Array[$count] == ""){
$col1Array[$count] = $emptyResult;
}
if($col2Array[$count] == ""){
$col2Array[$count] = $emptyResult2;
}
if($col3Array[$count] == ""){
$col3Array[$count] = $emptyResult3;
}
if($col4Array[$count] == ""){
$col4Array[$count] = $emptyResult4;
}
// Converts data into money if specified in the function
if($isMoney[0] == "Currency"){
if($col1Array != '0'){$colOne = money_format('%.2n', $col1Array[$count]);}
else{$col1Array = "$0.00";}
}else{$colOne = str_replace('0.00','0',$col1Array[$count]);}
if($isMoney[1] == "Currency"){
if($col2Array != '0'){$colTwo = money_format('%.2n', $col2Array[$count]);}
else{$colTwo = "$0.00";}
}else{$colTwo = str_replace('0.00','0',$col2Array[$count]);}
if($isMoney[2] == "Currency"){
if($col3Array != '0'){$colThree = money_format('%.2n', $col3Array[$count]);}
else{$colThree = "$0.00";}
}else{$colThree = str_replace('0.00','0',$col3Array[$count]);}
if($isMoney[3] == "Currency"){
if($col4Array != '0'){$colFour = money_format('%.2n', $col4Array[$count]);}
else{$colFour = "$0.00";}
}else{$colFour = str_replace('0.00','0',$col4Array[$count]);}
$tableHTML = $tableHTML . "
<tr>
<td>$colOne</td>
<td>$colTwo</td>
<td>$colThree</td>
<td>$colFour</td>
</tr>";
$count++;
}
$tableHTML = $tableHTML . "
</tbody>
</table>";
$this->tableHTML = $tableHTML;
$this->col1Array = $col1Array;
$this->col2Array = $col2Array;
$this->col3Array = $col3Array;
$this->col4Array = $col4Array;
$this->totalRows = count($this->col1Array);
}
Вот решение с array_push:
$arrayData = array(4,5,6,7,8,9,10);
$setArray = function($colNum) use($arrayData) {
$new_array = array();
for ($i = 0; $i < $colNum; $i++){
$old_array = array();
array_push($new_array, $old_array);
}
array_push($new_array, $arrayData);
return $new_array;
};
$new_array = $setArray(5);
echo '<pre>';
die(var_dump($new_array));
function ... use
, не знал об этом, спасибо!
Спасибо всем за вашу помощь! У меня есть много кода, над которым я работаю, и старался сделать его как можно меньше, чтобы получить тот вопрос, который у меня был. Я знаю, что это может сбивать с толку, но я не хотел публиковать все, поскольку я знал, что это небольшая проблема, которая с легким исправлением. Я искал эффективный способ хранения переменной массива в массиве. Моим непосредственным решением было создание функций для каждого количества массивов, которые будут сохранены. Но я хотел, чтобы сделать это там, где 1 функция может хранить столько массивов в массиве динамически. Вот решение благодаря @Sofiane Sadi для кода.
$arrayData = array(array(7,8,9),array(5,6,7),array(8,9,10));
$setArray = function($colNum) use($arrayData) {
$new_array = array();
for ($i = 0; $i < $colNum; $i++){
$old_array = array();
}
array_push($new_array, $arrayData);
return $new_array;
};
$new_array = $setArray(2);
echo '<pre>';
die(var_dump($new_array));
Я не уверен, что получаю то, что вы пытаетесь сделать. Хотя похоже, что вам нужно использовать рекурсивную функцию.
Для примера:
$array = array();
create_multi_array($array, 10);
function create_multi_array(&$array, $dim){
if($dim==0)
return;
create_multi_array($array[0], $dim-1);
}
echo "<pre>";
var_dump($array);
выходы:
array(1) {
[0]=>
array(1) {
[0]=>
array(1) {
[0]=>
array(1) {
[0]=>
array(1) {
[0]=>
array(1) {
[0]=>
array(1) {
[0]=>
array(1) {
[0]=>
array(1) {
[0]=>
array(1) {
[0]=>
NULL
}
}
}
}
}
}
}
}
}
}