PHP在一个数组中内爆一个数组

时间:2011-10-31 14:58:42

标签: php sql arrays expressionengine implode

我正在攻击Expression Engine,以便在成员资料表单中使用多选,广播和复选框自定义字段类型。

解析表单并提交更新查询的模型在一个数组变量'$ data'中提交表单中的所有值。 $ 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'

所以我需要在执行SQL之前内爆$ data数组中的任何数组。

是否有类似......的功能

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

...然后重新插入原始索引或位置?

任何帮助表示感谢。

2 个答案:

答案 0 :(得分: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 :(得分: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);

?>