前提・実現したいこと
$sourceのidが同じとき、preを統合させて、$targetを作りたいです。
php
1$source = array( 2 array('id'=>1, 'pre'=>'東京', 'rank'=>'A'), 3 array('id'=>1, 'pre'=>'大阪', 'rank'=>'A'), 4 array('id'=>4, 'pre'=>'沖縄', 'rank'=>'B'), 5);
↓統合させたい
php
1$target = array( 2 array('id'=>1, 'pre'=>['東京','大阪'], 'rank'=>'A'), 3 array('id'=>4, 'pre'=>['沖縄'], 'rank'=>'B'), 4);
発生している問題・エラーメッセージ
Uncaught Error: [] operator not supported for strings
該当のソースコード
実現することと近い以下のソースコードをネットから教えて頂きました。
以下のソースコードは
"東京,大阪"
となるのですが、その部分が
["東京","大阪"]
となれば実現したいことができます。
php
1$target = array(); 2foreach ($source as $item) { 3 $id = $item['id']; 4 foreach ($target as $skey=>$out) { 5 if ($out['id'] === $id) { 6 $outkey = $skey; 7 } 8 } 9 if (!isset($outkey)) { 10 $target[] = $item; 11 } else { 12 $target[$outkey]['pre'] .= ',' . $item['pre']; 13 unset($outkey); 14 } 15} 16print_r($target); 17 18
試したこと
実現したいことのために、こちらの部分を
$target[$outkey]['pre'] .= ',' . $item['pre'];
次のように変更しますと、先のエラーとなってしまうのです。
$target[$outkey]['pre'][] = $item['pre'];
エラーに対して試したこと
そこでエラーを見てますとstringsが悪いようで、こちらでstringsがそのまま追加されているのが悪いのかとあたりをつけまして、
php
1 if (!isset($outkey)) { 2 $target[] = $item; 3 }
次のように変更し、preなら配列として扱うようにしてみたのですがやはりできず、どうしてもわからないので質問させて頂きました。
php
1 if (!isset($outkey)) { 2 foreach ( $item as $k=>$v ) { 3 if( $k === 'pre' ){ 4 $target['pre'][] = $v; 5 }else{ 6 $target[$k] = $v; 7 } 8 } 9 }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/25 00:25
2020/03/25 01:03
2020/03/25 03:06
2020/03/25 03:12 編集
2020/03/25 03:19
2020/03/25 03:29