/ /配列キーの値が数値の場合、文字列ではなく整数にする方法は? -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"];

これに対する解決策はありますか?

回答:

回答№1の場合は3

このような単純な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;
}
}

回答№2の場合は1

名前を変更したくない値を含む配列を作成します。次に、配列をループします—反復ごとに、現在のキーが $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);