/ / Ako vynútiť, aby boli hodnoty kľúča poľa celé číslo namiesto reťazca, keď sú číselné? - php, polia

Ako prinútiť hodnoty kľúča poľa, aby boli celé číslo namiesto reťazca, keď sú numerické? - php, polia

Ako môžem vynútiť, aby všetky číselné hodnoty boli celé číslo namiesto reťazca, keď nejaká funkcia PHP prebieha napríklad s príkladom array_replace() ? tu je príklad:

môj $item je pole predvolených hodnôt, ktoré var_dump($item) produkuje toto:

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)

Potom zavolám funkciu na aktualizáciu $item pole s novými hodnotami, ktoré vychádzajú z db s funkciou array_replace($item, $item_db);, a keď ja var_dump($item) znova, mám toto:

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)

Chcem byť všetky číselné hodnoty (id, cid, pid, rid, section, ordering) celé číslo, okrem created a modified kľúča.

Ako to predpokladám urobiť bez toho, aby som zakaždým ručne písal niečo ako:

$item["section"] = (int) $item["section"];

Existuje nejaké riešenie?

odpovede:

3 pre odpoveď č. 1

Môžete použiť takúto jednoduchú slučku foreach:

foreach ($array as $k => $v) {
if ($k != "created" && $k != "modified") {
$array[$k] = (int) $v;
}
}

To je samozrejme, ak ste si istí, že všetky hodnoty sú číselné, aby ich bolo možné previesť na int. V opačnom prípade musíte použiť:

foreach ($item as $k => $v) {
if (is_numeric($v)) {
$item[$k] = (int) $v;
}
}

1 pre odpoveď č. 2

Vytvorte pole, ktoré obsahuje hodnoty, ktoré by ste nechceli premenovať. Potom prechádzajte pole - pri každej iterácii skontrolujte, či je aktuálny kľúč v $defaults pole. Ak nie je, zatlačte ho do nového poľa ($results) s aktuálnym číselným posunom ako kľúčom. Ak nie, zatlačte ho do nového poľa pomocou aktuálneho kľúča:

Niečo v duchu:

$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);