$del = $arr[1]['one'];
$del
записался байт ASCII-сивола "1", условно говоря. unset($arr[1]['one'])
$arr = [ 1 => [
'one' => '111',
'two' => '222',
], ];
$del = & $arr[1]; // ссылка на массив
unset($del['one']); // удаление ключа из массива по ссылке
print_r($arr); // результат Array ( [1] => Array ( [two] => 222 ) )
$del
с элементом исходного массива. А массив останется без изменений. $del = & $arr[1]['one']; // ссылка на элемент, который хочется удалить
unset($del); // не сработает. Просто разорвёт ссылку $del на элемент
/**
* Переделать массив объектов, добавив префикс названию каждого из свойств
* @param array<object> $srcArray исходный массив объектов
* @param string $prefix строка, которую добавить перед названием каждого из свойств
*/
$remap = fn (array $srcArray, string $prefix) => array_map(
function ($obj) use ($prefix) {
$keyValues = get_object_vars($obj);
$keys = array_keys($keyValues);
$values = array_values($keyValues);
return (object) array_combine(
array_map(fn ($key) => $prefix . $key, $keys),
$values
);
},
$srcArray
);
// Test
$babySitters = [
(object) ['a'=>'A1', 'b'=>'B-1'],
(object) ['a'=>'A2', 'b'=>'B-2'],
(object) ['a'=>'A3', 'b'=>'B-3'],
(object) ['a'=>'A4', 'b'=>'B-4', 'c'=>'C4'],
];
$result = $remap($babySitters, 'babysitter_');
echo json_encode($result);
[
{
"babysitter_a": "A1",
"babysitter_b": "B-1"
},
{
"babysitter_a": "A2",
"babysitter_b": "B-2"
},
{
"babysitter_a": "A3",
"babysitter_b": "B-3"
},
{
"babysitter_a": "A4",
"babysitter_b": "B-4",
"babysitter_c": "C4"
}
]
http://localhost:8000/api
docker run -p 8000:8000
http://centrifugo:8000/api
<?php
use OpenSwoole\WebSocket\Server;
use OpenSwoole\Http\Request;
use OpenSwoole\WebSocket\Frame;
$server = new Server("0.0.0.0", 9502);
$server->on("Start", function(Server $server)
{
echo "OpenSwoole WebSocket Server is started at http://127.0.0.1:9502\n";
});
$server->on('Open', function(Server $server, OpenSwoole\Http\Request $request)
{
echo "connection open: {$request->fd}\n";
$server->tick(1000, function() use ($server, $request)
{
$server->push($request->fd, json_encode(["hello", time()]));
});
});
$server->on('Message', function(Server $server, Frame $frame)
{
echo "received message: {$frame->data}\n";
$server->push($frame->fd, json_encode(["hello", time()]));
});
$server->on('Close', function(Server $server, int $fd)
{
echo "connection close: {$fd}\n";
});
$server->on('Disconnect', function(Server $server, int $fd)
{
echo "connection disconnect: {$fd}\n";
});
$server->start();
cmd + F2
(на маке) выделит все включения текущего слова. Мульти-курсор, можно заменить или допечатать/удалить часть – везде и сразу ©cmd + shift + P
и начать печатать "Emmet: Balance (inward)" – и выбрать команду$keys = ['sku', 'brand', 'City1', 'City2'];
$setKeys = function ($values) use ($keys) {
return array_combine($keys, $values);
};
$data = [ [1,2,3,4], [11,22,33,44], ];
$result = array_map($setKeys, $data);
Array
(
[0] => Array
(
[sku] => 1
[brand] => 2
[City1] => 3
[City2] => 4
)
[1] => Array
(
[sku] => 11
[brand] => 22
[City1] => 33
[City2] => 44
)
)
name
Например<input type="text" name="first_name" placeholder="First name">
<select name="day_of_week">
<option value="1">Monday</option>
<option value="2">Tuesday</option>
<option value="3">Wednesday</option>
</select>
<?php
$filename = 'form_responses.txt';
if (!empty($_POST)) {
$record = [
// перечисляются поля формы
'first_name' => filter_input(INPUT_POST, 'first_name', FILTER_SANITIZE_STRING),
'day_of_week' => filter_input(INPUT_POST, 'day_of_week', FILTER_SANITIZE_NUMBER_INT),
];
$recordString = implode('; ', $record) . PHP_EOL; // склеить значения через точку с запятой
file_put_contents($filename, $recordString, FILE_APPEND);
}
??
$field1 = 'Habr';
$field2 = 'QnA';
$array = [
'id' => $data->xxx->yyy->id ?? null,
'name' => $data->{'name'} ?? 'untitled',
'site' => $data->$field1->$field2 ?? 'поиск';
];
если запрошенного поля нет, ошибку не бросает, а берет значение по умолчанию, которое после ??
tv-symbol-price-quote__value js-symbol-last
там — пустой. Это после обработки в браузере JS, в тот элемент попадает обновляемое значение котировки.array()
на []
Создаёт массив с единственным элементом. И присваивает его в$options[$k] = [$row['value']]; // то же самое, что $options[$k] = array($row['value']);
$options[$k]
$arr1 = [ 1, 2, 3 ];
// то же самое, что
$arr1 = array(1, 2, 3);
$arr2 = [
'Habr' => 'QnA',
'Stack' => 'Overflow',
];
// то же самое, что
$arr2 = array(
'Habr' => 'QnA',
'Stack' => 'Overflow',
);
$args = [
'name1' => FILTER_SANITIZE_STRING,
'age1' => FILTER_SANITIZE_NUMBER_INT,
'weight1' => FILTER_SANITIZE_NUMBER_FLOAT,
];
$defaults = [
"name1" => "по умолчанию",
"age1" => "по умолчанию",
"weight1" => "по умолчанию",
];
$results = array_merge($defaults, filter_input_array(INPUT_GET, $args));
// вывод
foreach ($results as $name => $value) {
printf('<p>%s: %s</p>', $name, $value);
}
$options = [
[null, $_LNG['TYPE_ORDER']],
['select_all', $_LNG['ALL_TYPES']],
['select_domain', $_LNG['DOMAIN']],
['select_server', $_LNG['SERVER']],
['select_ssl', $_LNG['SSL']],
['select_desing', $_LNG['DESING']],
['select_script', $_LNG['SCRIPT']],
['select_layout', $_LNG['LAYOUT']],
['select_adv', $_LNG['ADV']],
['select_seo', $_LNG['SEO']],
];
printf('const options = %s;', json_encode($options));
options
полноценный элемент select
со всеми опциями: createSelect = () => {
const select = document.createElement('select');
options.forEach(([value, title]) => {
const option = document.createElement('option');
option.innerText = title;
if (value) {
option.value = value;
} else {
option.setAttribute('disabled', true);
option.setAttribute('selected', true);
}
select.appendChild(option);
});
return select;
};