/ / Как да принудим стойностите на ключа на масива да бъдат цели, вместо низ, когато са числови? - php, масиви

Как да принудим стойностите на масивите да са цяло число, вместо низ, когато са цифрови? - php, масиви

Как мога да принудя всички числови стойности да бъдат цели, вместо низ, когато някои функции 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);