PHP внедряет массив в массив

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

?>