Как динамически заполнить ключ и значение в ассоциативном массиве, используя для l oop in PHP - PullRequest
0 голосов
/ 31 марта 2020
$main= array(
    "data"=>array(
        "userid"=>"1",
        "$str",
        "acc_id"=>"10",
        "fi"=>"3"
    ),
    "next"=>"4"
);

Здесь я добавил

"value1"=>"$row->field1",
"value2"=>"$row->field2",
"value3"=>"$row->field3",
"value4"=>"$row->field4" 

, используя $str Динамически с помощью для l oop, потому что оно динамически c не исправлено.

Я хочу сделать этот массив, как показано ниже, чтобы он мог работать и выводить правильный вывод - это мой желаемый вывод (я хочу, чтобы этот массив работал)

array(
    "data"=>array(
        "userid"=>"$row->uid",
        "value1"=>"$row->field1",
        "value2"=>"$row->field2",
        "value3"=>"$row->field3",
        "value4"=>"$row->field4",
        "acc_id"=>"$acc_id",
        "tloop"=>"$timeloopc"
    ),
    "next"=>"$next"
);

Вывод - но массив принимает значение $ str как строка, и когда я печатаю это, он показывает вывод -

Array ( 
    [data] => Array ( 
        [user1] => 1 
        [0] => "value1"=>"$row->field1",
        "value2"=>"$row->field2",
        "value3"=>"$row->field3",
        "value4"=>"$row->field4",
        "value5"=>"$row->field5" 
        [user2] => 2 
        [fi] => 3 
    ) 
    [next] => 4 
)

Вышеприведенный вывод является проблемой ... Здесь массив обрабатывает некоторый ключ и значение, но не обрабатывает значение $ str ... он принимает его как sting .

Теперь он обрабатывает $str значения в виде строки от "value1" и "field1" .. до .. 4

Помогите мне динамически заполнить ключ и значение в ассоциативном использование массива для l oop.

В массиве "value1 and field1" - здесь числа являются динамическими c - "value2" и "field2" ...

Когда я создаю массив Dynami c, он не работает как массив. Если я сделаю это * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *.

<?php 
    $ct = 4;
    $str = '';
    for($cunt=1; $cunt<=$ct; $cunt++)
    {
        $valu= '"value';
        $cuntc = $cunt.'"';
        $rw = '"$row';
        $fild= "field";

        $cp = $valu.$cuntc."=>".$rw."->".$fild.$cuntc;
        $str .= $cp . ',';

    }   
    //trim the , from last value
    $str = rtrim($str, ",");

    $main= array("data"=>array("userid"=>"1","$str","acc_id"=>"10","fi"=>"3"),"next"=>"4");
    print_r($main);
?>

1 Ответ

0 голосов
/ 01 апреля 2020

Я не знаю, что именно вы хотите. Существует код, массив сборки которого вы хотели бы иметь:

<code>$main= array(
    "data"=>array(
        "userid"=>"1",
        "$str",
        "acc_id"=>"10",
        "fi"=>"3"
    ),
    "next"=>"4"
);

$ct = 4;
$subArray = array();
$resultArray = array();

$resultArray['data']['userid'] = '$row->uid';

for($cunt=1; $cunt<=$ct; $cunt++)
{
    $valu= 'value';
    $rw = 'row';
    $fild= "field";
    $resultArray['data'][$valu . $cunt] = '$' . $rw . '->' . $fild .$cunt;
}  
$resultArray['data']['acc_id'] = '$acc_id';
$resultArray['data']['tloop'] = '$timeloopc';
$resultArray['next'] = '$next';

echo "<pre>";
var_dump($resultArray);
echo "
";

Но если вам не нужно ограниченное упорядочение ключей, вы можете использовать что-то вроде этого ( это перестроить массив $ main):

    $main= array(
        "data"=>array(
            "userid"=>"1",
            "$str",
            "acc_id"=>"10",
            "fi"=>"3"
        ),
        "next"=>"4"
    );

    $fields = array();
    for($cunt=1; $cunt<=$ct; $cunt++)
    {
        $valu= 'value';
        $rw = 'row';
        $fild= "field";
        $fields[$valu . $cunt] = '$' . $rw . '->' . $fild .$cunt;
    } 


    foreach ($fields as $key => $value) {
        $main['data'][$key] = $value;
    }

И есть решение с функциями:

    function generateFieldArray($keyName, $obj, $field, $rowCount)
    {
        $resultArray = array();
        for($count=1; $count<=$rowCount; $count++)
        {
            $resultArray[$keyName . $count] = '$' . $obj . '->' . $field .$count;
        } 
        return $resultArray;
    }

    function buildMainArray($inputArray, $keyName, $obj, $field, $rowCount)
    {
        $arrayToAdd = generateFieldArray($keyName, $obj, $field, $rowCount);
        foreach ($arrayToAdd as $key => $value) {
            $inputArray['data'][$key] = $value;
        }

        return $inputArray;
    }

    function buildMainArray2($inputArray, $keyName, $obj, $field, $rowCount)
    {
        $resultArray = array();
        $resultArray['data']['userid'] = '$row->uid';
        $arrayToAdd = generateFieldArray($keyName, $obj, $field, $rowCount);
        foreach ($arrayToAdd as $key => $value) {
            $resultArray['data'][$key] = $value;
        }
        $resultArray['data']['acc_id'] = '$acc_id';
        $resultArray['data']['tloop'] = '$timeloopc';
        $resultArray['next'] = '$next';

        return $resultArray;
    }

    $main= array(
        "data"=>array(
            "userid"=>"1",
            "$str",
            "acc_id"=>"10",
            "fi"=>"3"
        ),
        "next"=>"4"
    );

    $result = buildMainArray($main, 'value', 'row', 'field', 4);
    // or
    $result = buildMainArray2($main, 'value', 'row', 'field', 4);
...