質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

4回答

507閲覧

PHP 配列 キー名が0になってしまう【未解決】

newta

総合スコア26

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2022/03/19 19:11

編集2022/03/19 23:24

少々特殊な書き方/やり方かもしれませんが教えてください
array_unshiftを使い配列の先頭に要素を追加しました
下記は実行結果です
"0"のキー名の部分が"bbbb"となるはずが0となってしまいます
"0"の部分を"bbbb"とするにはどうしたらいいのでしょうか?

これはPHPの実行結果です { "data_list": { "0": {//"bbbb"にしたい "list": { "s": "a" } }, "aaaa": { "list": { "n": "a" } } } }
配列を入れ替えたりしていますが、この形式は変えずお答えいただきたいです <?php $a='{ "aaaa": { "list": { "n": "a" } } }'; $a = json_decode($a, true); $l["data_list"]=$a; $c["data_list"]["bbbb"]["list"]["s"]="a"; array_unshift($l["data_list"], $c["data_list"]["bbbb"]); //array_unshift($l["data_list"], $c["data_list"]);こうすると"0":{"bbbb":{となってしまう $l = json_encode($l, JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT); echo "<pre>".$l."</pre>";//確認用 ?>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

'bbbb'だけをキーにした配列を作ってから、配列の足し算でつないでみてはどうでしょうか。

投稿2022/03/20 02:47

maisumakun

総合スコア145184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

配列が動的に増えた場合にbbbbを先頭にもっていくにはどうしたらいいのでしょうか?

とりあえず、見様見真似で関数化してみました。

php

1<?php 2 3// 4// unshift_with_key(array &$lst, string $key) 5// 6// Move the element to the front of the sequence, unchange order of rest 7// elements in the sequence 8// 9// Parameters: 10// $lst: associative array 11// $key: key of a element to move to the front of $lst 12// 13// Returns: None 14// 15function unshift_with_key(&$lst, $key) { 16 $idx = array_search($key, array_keys($lst)); 17 if ($idx === false || $idx === 0) { 18 return; 19 } 20 $order = range(0, count($lst)-1); 21 $order[$idx] = -1; 22 array_multisort($order, $lst); 23 return; 24} 25 26$a='{ 27"aaaa": { 28 "list": { 29 "n": "a" 30 } 31} 32}'; 33$a = json_decode($a, true); 34 35$l["data_list"] = $a; 36$l["data_list"]["bbbb"]["list"]["s"] = "b"; 37$l["data_list"]["cccc"]["list"]["s"] = "c"; 38 39$first_key = "bbbb"; 40unshift_with_key($l["data_list"], $first_key); 41 42$l = json_encode($l, JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT); 43echo "<pre>".$l."</pre>";//確認用 44 45# 46<pre>{ 47 "data_list": { 48 "bbbb": { 49 "list": { 50 "s": "b" 51 } 52 }, 53 "aaaa": { 54 "list": { 55 "n": "a" 56 } 57 }, 58 "cccc": { 59 "list": { 60 "s": "c" 61 } 62 } 63 } 64}</pre>

投稿2022/03/20 12:58

編集2022/03/20 17:06
melian

総合スコア19805

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

newta

2022/03/20 14:19 編集

できました。 ありがとうございます。 array_multisort([1, 0], $l["data_list"]);で配列の順番を変えらえるんですね
newta

2022/03/20 14:19 編集

配列が動的に増えた場合にbbbbを先頭にもっていくにはどうしたらいいのでしょうか? <?php $a='{ "aaaa": { "list": { "n": "a" } } }'; $a = json_decode($a, true); $l["data_list"] = $a; $l["data_list"]["bbbb"]["list"]["s"] = "a"; //動的に配列は増える bbbが配列の何番目にあるかも不定 $l["data_list"]["cccc"]["list"]["s"] = "a"; array_multisort([1, 0], $l["data_list"]); $l = json_encode($l, JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT); echo "<pre>".$l."</pre>";//確認用 ?>
melian

2022/03/20 14:30

[1, 0] がソートされると [0, 1] になりますが、それと同期して $l["data_list"] の中身がソートされます。つまり、$l["data_list"]["aaaa"] と $l["data_list"]["bbbb"] の順序が入れ替わることになります。 > 配列が動的に増えた場合にbbbbを先頭にもっていくにはどうしたらいいのでしょうか? "cccc" が追加された場合は、以下になります。 array_multisort([1, 0, 2], $l["data_list"]); 要は先頭に持っていきたい要素の位置に最小値(この場合は 0)を配置した配列を動的に生成することになります。PHP に index 関数の様なモノがあれば、この処理を一般化(関数化)するのは難しくはないかと思います(私は PHP に関しては全く分かりません)。
guest

0

下記で一応できましたが、、、このような周りくどいやり方以外にできる方法があれば教えてください

<?php $a='{ "aaaa": { "list": { "n": "a" } } }'; $a = json_decode($a, true); $l["data_list"]=$a; $c["data_list"]["bbbb"]["list"]["s"]="a"; array_unshift($l["data_list"], $c["data_list"]["bbbb"]); $k=[]; $j=[]; foreach ($l["data_list"] as $index => $val) { if($index=="0"){ $index="bbbb"; } array_push($k,$index); array_push($j,$val); } $l["data_list"] = array_combine($k, $j); $l = json_encode($l, JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT); echo "<pre>".$l."</pre>";//確認用 ?>

投稿2022/03/19 23:37

newta

総合スコア26

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

変えてほしくない形式がどこにあたるのか分からなりませんが、array_unshiftを使い、他の部分を変えない。といったところであれば以下でどうでしょうか

php

1<?php 2$a='{ 3"aaaa": { 4 "list": { 5 "n": "a" 6 } 7} 8}'; 9$a = json_decode($a, true); 10$l["data_list"]=$a; 11$c["data_list"]["bbbb"]["list"]["s"]="a"; 12 13//unshiftの前にbbbbの空配列をセットしておく 14$l["data_list"]["bbbb"] = []; 15array_unshift($l["data_list"]["bbbb"], $c["data_list"]["bbbb"]); 16 17$l = json_encode($l, JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT); 18echo "<pre>".$l."</pre>";//確認用

もしarray_unshiftを使わなくてもいいのなら普通に$lにbbbbを追加してもいいと思います。

php

1<?php 2$a='{ 3"aaaa": { 4 "list": { 5 "n": "a" 6 } 7} 8}'; 9$a = json_decode($a, true); 10$l["data_list"]=$a; 11$c["data_list"]["bbbb"]["list"]["s"]="a"; 12 13//$lのbbbbに追加する 14$l["data_list"]["bbbb"] = $c["data_list"]["bbbb"]; 15 16$l = json_encode($l, JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT); 17echo "<pre>".$l."</pre>";//確認用

投稿2022/03/19 20:10

kurazushi

総合スコア43

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

newta

2022/03/19 23:23 編集

両方のソースが { "data_list": { "aaaa": { "list": { "n": "a" } }, "bbbb": [ { "list": { "s": "a" } } ] } } となります 私はキー名"aaaa"の前に"bbbb"を入れたく、array_unshiftで"aaaa"の前に"bbbb"を追加したいのですが・・・
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問