PHP: элементы с и без ключей явных один и тот же массив
Я пытаюсь выяснить, лучше или чище, чтобы сделать что-то подобное в PHP:
// Isto será passado como argumento de uma função...
$params = array('Nome', 'Idade', 'Mail' => '[email protected]');
"Имя" и "Возраст" указаны значения ключей назначается автоматически (например, 0 и 1, например), и "Почта" ключ, значение "[email protected]":
[0] => 'Nome',
[1] => 'Idade',
['Mail'] => '[email protected]'
Когда я шаг это цикл "foreach", я делаю это, чтобы иметь "Имя" и "Возраст", так как параметры по сути:
foreach ($params as $k => $i) {
// Esta é a parte "feia"!
if (is_int($k)) {
$k = $i;
$i = false;
}
// Para fazer algo assim, por exemplo...
$out = "";
if ($i) {
$out .= "<p><a href=\"mailto:$i\">$k</a></p>\n";
} else {
$out .= "<p>$k<p>\n";
}
}
, который будет возвращать что-то вроде:
<p>Name</p>
<p>Age</p>
<p><a href="mailto:[email protected]">Mail</a></p>
вопрос В том: есть чисто PHP дифференцировать элементы того же массива, которые имеют ключ явное (Mail => [email protected]), не имеющих (Имя и Возраст)?
Примечание: приведенный выше код был разделен на два этапа, чтобы лучше понять текущее решение, которое отличает значение ключа тестирование, если он является integer, но код, который я использую на самом деле:
$o = "";
foreach ($params as $k => $i) {
if (!is_int($k)) {
$o .= "<p><a href=\"$i\">$k</a></p>\n";
} else {
$o .= "<p>$i</p>\n";
}
}
2 answers
Судя По всему, ответ на исходный вопрос-это же , есть режим PHP дифференцировать элементы с и без ключей внутри одного и того же массива.
Но проблема вытекает необходимость создать функцию, читаемым, где количество переданных аргументов может варьироваться, поэтому первоначальный выбор в массив, что позволит называется так:
add_table_row(['Nome', 'Idade', 'Mail' => '[email protected]']);
...
add_table_row(array('Nome', 'Idade', 'Mail' => '[email protected]'));
Однако, как я выяснила, существует ли способ передать переменное количество аргументов функции, с помощью функции "func_get_args()", и вызов функции, может стать еще более читаемым:
// PHP >= 5.4
add_table_row('Nome', 'Idade', ['Mail' => '[email protected]']);
И
add_table_row('Nome', 'Idade', array('Mail' => '[email protected]'));
Таким образом, например, полный код функции будет выглядеть так:
function add_table_row() {
$args = func_get_args(); // retorna uma array de argumentos...
$o = "<tr>\n";
foreach ($args as $value) {
if (is_array($value)) { // Se o argumento é uma array...
$cont = key($value); // O dado da célula é a chave...
$param = current($value); // E o parâmetro da tag é o valor...
$o .= "<td $param>$cont</td>\n";
} else {
$o .= "<td>$value</td>\n";
}
}
$o .= "</tr>\n";
return $o;
}
Надеюсь, что это полезно кому-либо еще.
, Поскольку вы будете создать функцию, чтобы сделать это, вы можете передать как строку и найти все элементы, маркеры... Просто взорваться в ,
и если есть какие - :
функция будет понять, что такое массив.add_table_row('Nome,Idade,Mail:[email protected]')
function add_table_row( $string )
{
$string = explode( ',' , $string );
foreach( $string as $line )
{
if( strpos( $line , ':' ) && $elementos = explode( ':' , $line ) )
{
echo $elementos[0] . ', ' . $elementos[1];
}
else
{
echo $line;
}
}
}
Output
Имя
Возраст -
Почта [email protected]