[英]Print the keys of an array
我無法弄清楚如何將可變數量的變量傳遞給函數。 我認為傳入一個數組並使用變量名稱的數組鍵可以取代將額外的變量傳遞給函數的需要,並且它有效(我確信有更好的方法來實現這一點,建議歡迎)。 但是,我似乎無法從函數內部的數組中取出鍵。
數組:
$parameters[day] = 1;
$parameters[month] = 8;
$parameters[year] = 2010;
功能內部:
foreach(key($parameters) as $key)
{
print($key);
print("<br>");
}
函數內部的代碼返回一個警告:為foreach()提供的參數無效。 如何將鍵拉出陣列?
您可以使用PHP的array_keys函數來獲取鍵,如下所示:
foreach(array_keys($parameters) as $paramName)
echo $paramName . "<br>";
或者,您可以使用特殊的foreach
運行數組,該foreach
允許您為每個元素分隔鍵和值,如下所示:
foreach($parameters as $paramName => $value)
echo $paramName . "<br>";
此外,請確保使用"string"
(帶引號)或整數(如1337
)作為鍵,如下所示:
$parameters["day"] = 1;
$parameters["month"] = 8;
$parameters["year"] = 2010;
或者如果你想獲得更多的愛好者:
$parameters = array(
"day" => 1,
"month" => 8,
"year" => 2010
);
您的代碼應如下所示:
$parameters = array(
"day" => 1,
"month" => 8,
"year" => 2010
);
foreach($parameters as $paramName => $paramValue)
echo $paramName . "<br>";
將關聯數組傳遞給函數是傳遞可變數量參數的合理方法。
foreach ($parameters as $key => $value) {
echo $key . ' = ' . $value . '<br>';
}
或者,您可以傳入stdClass
的實例(將參數強制轉換為對象)。 但陣列完成了這項工作。
我假設您的數組鍵不是常量,在這種情況下,它們應該是帶引號的字符串:
$parameters['day'] = 1;
$parameters['month'] = 8;
$parameters['year'] = 2010;
我相信有更好的方法來實現這一目標,歡迎提出建議
因為您要求提供替代建議,所以這是一個。 您可以使用varargs將可變數量的參數傳遞給函數。 這是一個例子:
function my_function() {
$numArgs = func_num_args();
$args = func_get_args(); // an array of the arguments, in order
}
這不會為您提供“命名”參數,但它確實允許您使用可變數量的參數(就像您聲稱要在您的問題中嘗試做的那樣)。
以下是一些相關的文檔頁面:
但是,這並不是說基於陣列的方法很糟糕。 在某些方面,它提供了電池可讀性,因為您明確地將鍵映射到值; 閱讀代碼的維護者將能夠更好地理解傳遞給函數的內容。 我只是給你一些選擇。
array_keys函數將返回所有數組鍵的數組。
嘗試這個
foreach($parameters as $key => $value)
如果您只想輸出密鑰,則無需循環即可完成此操作:
$parameters = ["day" => 1, "month" => 8, "year" => 2010];
echo implode('<BR>', array_keys($parameters));
或者輸出帶有值的鍵:
$parameters = ["day" => 1, "month" => 8, "year" => 2010];
echo implode('<BR>', array_map(function($v, $k){ return $k.'='.$v;}, $parameters, array_keys($parameters)));
<?php
$array = array(0 => 100, "color" => "red");
print_r(array_keys($array));
?>
foreach(array_keys($parameters) as $key) {
echo $key.'<br/>';
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.