2015-04-28 6 views
1

Это мой массив:array_push() выдает ошибку

Array (
[country_0] => E92000001 
[country_1] => L93000001 
[country_2] => M83000003 
[county_0] => E10000002 
[county_1] => E10000003 
[county_2] => E10000006 
[county_3] => E10000007 
[gor_0] => A 
[gor_1] => B 
) 

Я хотел бы получить что-то вроде этого:

Array 
(
[country] => Array(
       [0] => L93000001 
       [1] => M83000003 
       [2] => M83000003 
      ) 

[county] => Array(
       [0] => E10000002 
       [1] => E10000003 
       [2] => E10000006 
       [3] => E10000007 
      ) 
[gor] => Array(
       [0] => A 
       [1] => B 
      ) 
) 

Мой код для этого в настоящее время это:

$converted_array = []; 

    foreach ($input as $key => $value) { 

     $underscore_position = strpos($key, "_"); //returns integer. 

     $stripped_key = substr($key, 0, $underscore_position); //returns word eg "country" 

     array_push($converted_array[$stripped_key], $value); //doesn't work 
     array_push($converted_array, $stripped_key[$value]); //doesn't work 
     array_push($converted_array, $stripped_key => $value); //doesn't work 
    } 

    print_r($converted_array); 

Я не могу получить ни один из моих array_push() s для работы. Я продолжаю получать синтаксическую ошибку или ошибочную ошибку смещения.

Возможно, это не самый лучший способ. Я в основном пытаюсь манипулировать данными скрытой формы. Каждое скрытое поле будет выглядеть примерно так:

<input name="country_0" type="hidden" value="E92000001"> 

Число после country_ только сохранить каждый вход уникальным. Так что, возможно, было бы лучше иметь что-то вроде <input name="country_E92000001" type="hidden" value="E92000001"> и сделать какое-то сращивание ключей массива.

Итак, как я могу заставить мой код работать или есть лучший способ?

EDIT:

Для создания скрытых полей ввода, которые я использую этот код:

<input name="<?php echo $key; ?>" type="hidden" value="<?php echo $subvalue; ?>"> 

В результате добавления [] дает мне ошибку Cannot use [] for reading. Есть ли способ решить это?

ответ

3

Просто измените имя атрибута вашего поля ввода к следующему:

<input name="country[]" type="hidden" value="E92000001"> 
        //^^ 

Тогда он автоматически будет массивом.

EDIT:

Как с вашего обновленного кода вы можете использовать следующий код для добавления [] имени:

<input name="<?php echo strtok($key, "_") . "[]"; ?>" type="hidden" value="<?php echo $subvalue; ?>"> 
+0

Смотрите мое редактирование/обновление в исходном сообщении – mikelovelyuk

+1

@ mike3875 Как добавить скобки '[]' в коде? Просто попробуйте использовать это: ' "Type =" hidden "value =" ">' – Rizier123

+0

'' – mikelovelyuk

2

Вы должны попробовать это

<input name="country[]" type="hidden" value="E92000001"> 
<input name="country[]" type="hidden" value="L93000001"> 
<input name="country[]" type="hidden" value="M83000003"> 

он будет производят массив следующим образом:

Array 
(
     [country] => Array(
       [0] => L93000001 
       [1] => M83000003 
       [2] => M83000003 
     ) 
) 
+0

См. Мое редактирование/обновление в исходном сообщении – mikelovelyuk

1

Лучшим решением является использование массива в полях ввода:

<input name="country[]" type="hidden" value="E9200" /> 
<input name="country[]" type="hidden" value="E9201" /> 
<input name="country[]" type="hidden" value="E9202" /> 
+0

См. Мое редактирование/обновление в исходном сообщении – mikelovelyuk

Смежные вопросы