Подкажите пожалуйста. У меня есть цикл в php
foreach ($sovteacher->find()->asArray()->all() as $key => $customer) {
array_push($stack, $customer['fio1'].' '.$customer['fio2'].' '.$customer['fio3']);
}
Если я использую
array_push($stack, $customer['fio1'].' '.$customer['fio2'].' '.$customer['fio3']);
У меня получается объект следующего вида.
{
[0] => 'value'
[1] => 'value'
[n] => 'value'
}
Как мне изменить метод чтобы получился массив.
[
'0' => 'value',
'1' => 'value',
'n' => 'value',
]
Посмотрел комментарии увидел в чем проблема...
Подробности:
(php) -> lambda
Проблема в том, что я лямбду не могу локально отлаживать. Только если sam aws использовать, но там лямбды по другому пишутся...
В самой лямбде у меня для обработки request стоит следующий код
module.exports = async (req, res) => {
if (req.method === 'POST') {
let body = '';
req.on('data', chunk => {
body += chunk.toString(); // convert Buffer to string
});
req.on('end', () => {
res.end(body);
});
}
};
Код в PHP
public function actionConvert()
{
\Yii::$app->response->format = \yii\web\Response::FORMAT_RAW;
$sovteacher = new SovteachParticipant();
$stack = array();
$array = array( );
foreach ($sovteacher->find()->asArray()->all() as $key => $customer) {
$array[$key] = 'sdfsdfsd';
// array_push($stack, $customer['fio1'].' '.$customer['fio2'].' '.$customer['fio3']);
}
echo'<pre>';
var_dump($array);
$client = new Client();
$response = $client->createRequest()
->setMethod('POST')
->setUrl('https://lambda.szababurinv.now.sh')
->setData( $array)
->send();
if ($response->isOk) {
echo'<pre>';
var_dump($response->content); exit;
}
return $this->redirect(['index']);
}
Посмотрев все комментарии, проверил ответы.
В таком виде ответ приходит правильный
foreach ($sovteacher->find()->asArray()->all() as $key => $customer) {
$array[$key] = 'sdfsdfsd';
// array_push($stack, $customer['fio1'].' '.$customer['fio2'].' '.$customer['fio3']);
}
Запрос - Ответ
array(3) {
[0]=>
string(8) "sdfsdfsd"
[1]=>
string(8) "sdfsdfsd"
[2]=>
string(8) "sdfsdfsd"
}
string(32) "0=sdfsdfsd&1=sdfsdfsd&2=sdfsdfsd"
А вот в таком не правильно:
array(3) {
[0]=>
string(12) "Синкин"
[1]=>
string(16) "Петухова"
[2]=>
string(18) "Нестерова"
}
string(146) "0=%D0%A1%D0%B8%D0%BD%D0%BA%D0%B8%D0%BD&1=%D0%9F%D0%B5%D1%82%D1%83%D1%85%D0%BE%D0%B2%D0%B0&2=%D0%9D%D0%B5%D1%81%D1%82%D0%B5%D1%80%D0%BE%D0%B2%D0%B0"
Мне сейчас надо как то к строке правильно переменную привести.
Старайтесь не нагромождать все в кучу, потом ведь самому сложно будет разгребать. Кто му же еще и стыдно станет со временем. Есть же переменные.
$stack = [];
$customer = $sovteacher->find()->asArray()->all();
foreach ($rows as $key => $customer) {
$stack[] = $customer['fio1'] . ' ' . $customer['fio2'] . ' ' . $customer['fio3']);
}
ТО, это будет массив. Утверждать не буду, но кажется такая штука работает быстрее $stack[] = $customer['fio1']
, чем если пушить в массив.
// Объявляем пустой массив, в который будем добавлять элементы.
$stack = [];
// Предварительно получаем исходные данные.
//$customers = $sovteacher->find()->asArray()->all();
$customers = [
['fio1' => '1 fio1', 'fio2' => '1 fio2', 'fio3' => '1 fio3', 'year' => '43'],
['fio1' => '2 fio1', 'fio2' => '2 fio2', 'fio3' => '2 fio3', 'year' => '33'],
['fio1' => '3 fio1', 'fio2' => '3 fio2', 'fio3' => '3 fio3', 'year' => '27']
];
foreach ($customers as $customer) {
//$stack[] = $customer['fio1'].' '.$customer['fio2'].' '.$customer['fio3'];
array_push($stack, $customer['fio1'].' '.$customer['fio2'].' '.$customer['fio3']);
}
// Распечатаем тип и содержимое переменной.
dump(gettype($stack));
dump($stack);
// Кодируем в json.
$stack = json_encode($stack);
// Распечатаем тип и содержимое переменной.
dump(gettype($stack));
dump($stack);
UPD
А вот в таком не правильно:
array(3) { [0]=> string(12) "Синкин" [1]=> string(16) "Петухова" [2]=> string(18) "Нестерова" }
Строка array(3) { указывает на то, что это массив с тремя элементами.
Спасибо всем за комментарии и варианты ))
это формат данных был application/x-www-form-urlencoded он на стороне yii2 не правильно декодировался когда русский язык был.
на на стороне node.js вставил преобразование в json
function json (str){
return new Promise((resolve, reject) => {
let obj,i,pt,keys,j,ev;
if (typeof json.br !== 'function')
{
json.br = function(repl)
{
if (repl.indexOf(']') !== -1)
{
return repl.replace(/\](.+?)(,|$)/g,function($1,$2,$3)
{
return json.br($2+'}'+$3);
});
}
return repl;
};
}
str = '{"'+(str.indexOf('%') !== -1 ? decodeURI(str) : str)+'"}';
obj = str.replace(/\=/g,'":"').replace(/&/g,'","').replace(/\[/g,'":{"');
obj = JSON.parse(obj.replace(/\](.+?)(,|$)/g,function($1,$2,$3){ return form2Json.br($2+'}'+$3);}));
pt = ('&'+str).replace(/(\[|\]|\=)/g,'"$1"').replace(/\]"+/g,']').replace(/&([^\[\=]+?)(\[|\=)/g,'"&["$1]$2');
pt = (pt + '"').replace(/^"&/,'').split('&');
for (i=0;i<pt.length;i++)
{
ev = obj;
keys = pt[i].match(/(?!:(\["))([^"]+?)(?=("\]))/g);
for (j=0;j<keys.length;j++)
{
if (!ev.hasOwnProperty(keys[j]))
{
if (keys.length > (j + 1))
{
ev[keys[j]] = {};
}
else
{
ev[keys[j]] = pt[i].split('=')[1].replace(/"/g,'');
break;
}
}
ev = ev[keys[j]];
}
}
obj = JSON.stringify(obj)
resolve(obj)
})
}
Всё заработало
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Как в php получить первую пару ключ=значение в массиве? Например:
Отделение «описания методов» от их реализацииРаньше я тебе рассказывал, что если ты хочешь разрешить вызывать методы своего класса из других...
Всем привет! Необходимо скачать файл по имеющейся ссылке и сохранить по указанному путиПуть указать несложно, скачать файл, относительно,...