#php #sql #arrays #expressionengine #implode
#php #sql #массивы #expressionengine #взрывает
Вопрос:
Я взламываю механизм выражений, чтобы включить использование пользовательских типов полей multiselect, radio и checkbox в форме профиля участника.
Модель, которая анализирует форму и выполняет запрос на обновление, отправляет все значения из формы в одну переменную массива — ‘$data’. Одно из значений массива в $data — это другой массив, полученный из поля типа multiselect, поэтому при отправке запроса он возвращает ошибку…
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 );
?>
Ответ №2:
Это лучше всего использовать для новой функции сопоставления с анонимной функцией (начиная с 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);
?>