0

私はExpressionEngineをハッキングして、メンバープロファイルフォーム内で複数選択、ラジオ、およびチェックボックスのカスタムフィールドタイプを使用できるようにしています。

フォームを解析して更新クエリをコミットするモデルは、フォームからすべての値を1つの配列変数('$ data')に送信します。$ data内の配列値の1つは、複数選択フィールドタイプからの別の配列です。したがって、クエリが送信されると、エラーが返されます...

Unknown column 'Array' in 'field list'
UPDATE `apcims_member_data` SET `m_field_id_1` = '', `m_field_id_2` = Array WHERE `member_id` = '2'

したがって、SQLを実行する前に、$data配列内の配列を内破する必要があります。

次のような機能はありますか...

foreach($data AS $value) {
if($value(is_array)) { $value = implode("|", $value); }
}

...次に、元のインデックスまたは位置に再挿入しますか?

助けていただければ幸いです。

4

2 に答える 2

1

これは、無名関数を使用した新しいマッピング関数に最適です (PHP 5.3 以降)。

<?php

$data = array('a' => array(1, 2, 3), 'b' => 9, 'c' => array(4, 5, 6));

$data = array_map(function($value) {
  return is_array($value) ? implode('|', $value) : $value;
}, $data);

var_dump($data);

?>
于 2011-10-31T15:28:53.980 に答える
1

あなたはかなり近かった。お探しの方法は ですis_array。また、foreach配列内の値を自分で更新できるように、値だけでなくインデックスも提供できます。

<?php
$data =array( 'a' => array( 1,2,3 ), 'c' => array( 4,5,6 ) );
foreach($data AS $key => $value) {
if(is_array($value)) 
{ 
  $data[ $key ] = implode("|", $value); 
}
}
var_dump( $data );
?>
于 2011-10-31T15:04:11.960 に答える