Как мога да принудя всички числови стойности да бъдат цели, вместо низ, когато някои функции PHP се изпълняват за пример с array_replace()
? ето един пример:
мой $item
е масив от стойности по подразбиране, който var_dump($item)
произвежда това:
array (size=12)
"id" => string "" (length=0)
"cid" => int 2
"pid" => string "" (length=0)
"rid" => string "" (length=0)
"section" => int 0
"title" => string "" (length=0)
"slug" => string "" (length=0)
"image" => string "" (length=0)
"description" => string "" (length=0)
"ordering" => string "" (length=0)
"created" => string "" (length=0)
"modified" => string "" (length=0)
След това, аз се обаждам на функция за актуализиране $item
масив с нови стойности, който идва от db с функция array_replace($item, $item_db);
, и когато аз var_dump($item)
отново, разбирам това:
array (size=12)
"id" => string "12" (length=2)
"cid" => string "1" (length=1)
"pid" => string "0" (length=1)
"rid" => string "37" (length=2)
"section" => string "0" (length=1)
"title" => string "Article2" (length=8)
"slug" => string "articles123" (length=11)
"image" => string "e9213e52d235bd892b3337fce3172bed.jpg" (length=36)
"description" => string "" (length=0)
"ordering" => string "3" (length=1)
"created" => string "2014-05-15 14:51:10" (length=19)
"modified" => string "2014-05-15 23:29:40" (length=19)
Искам да са всички цифрови стойности (id, cid, pid, rid, section, ordering
) цяло число, с изключение на created
и modified
ключове.
Как да го направя, без да пиша ръчно всеки път нещо като:
$item["section"] = (int) $item["section"];
Има ли решение за това?
Отговори:
3 за отговор № 1Можете да използвате такъв прост цикъл на foreach:
foreach ($array as $k => $v) {
if ($k != "created" && $k != "modified") {
$array[$k] = (int) $v;
}
}
Това разбира се е, ако сте сигурни, че всички стойности са цифрови, за да могат да бъдат преобразувани в int. В противен случай трябва да използвате:
foreach ($item as $k => $v) {
if (is_numeric($v)) {
$item[$k] = (int) $v;
}
}
1 за отговор № 2
Създайте масив, съдържащ стойностите, които бихте искали да не бъдете преименувани. $defaults
масив. Ако не е, натиснете го в нов масив ($results
) с текущото числово изместване като ключ. Ако не, натиснете го в новия масив с текущия ключ:
Нещо в духа на:
$defaults = ["created", "modified"]; // Keys to be left untouched
$result = []; // Results array
$i = 0; // Numeric offset
foreach ($array as $key => $value) {
if (!in_array($key, $defaults)) {
$result[++$i] = $value;
} else {
$result[$key] = $value;
}
}
print_r($result);