2011-10-31 118 views
0

我正在黑客使用Expression Engine來在成員配置文件表單中啓用多選,無線電和複選框自定義字段類型。PHP爆炸陣列內的數組

解析表單並提交更新查詢的模型會在一個數組變量 - '$ data'中提交表單中的所有值。一個$數據中的數組值是從多選字段類型來了另一個陣列 - 所以,當提交查詢將返回一個錯誤...

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

所以我需要破滅$ data數組中的任何數組在執行SQL之前。

是否有一個功能類似...

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

...然後重新插入原來的索引或位置?

任何幫助表示讚賞。

回答

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

?>