Перейти к содержимому

Как объединить массив в строку php

  • автор:

array_combine

Создаёт массив ( array ), используя значения массива keys в качестве ключей и значения массива values в качестве соответствующих значений.

Список параметров

Массив ключей. Некорректные значения для ключей будут преобразованы в строку ( string ).

Возвращаемые значения

Возвращает скомбинированный массив ( array ).

Ошибки

Начиная с PHP 8.0.0, выдаётся ошибка ValueError , если количество элементов в keys и values не совпадает. До PHP 8.0.0 вместо этого выдавалась ошибка уровня E_WARNING .

Список изменений

Версия Описание
8.0.0 Функция array_combine() теперь выбрасывает ошибку ValueError , если количество элементов в массивах не совпадает; ранее функция возвращала значение false .

Примеры

Пример #1 Простой пример использования array_combine()

$a = array( ‘green’ , ‘red’ , ‘yellow’ );
$b = array( ‘avocado’ , ‘apple’ , ‘banana’ );
$c = array_combine ( $a , $b );

Результат выполнения приведённого примера:

Array ( [green] => avocado [red] => apple [yellow] => banana )

Смотрите также

  • array_merge() — Сливает один или несколько массивов
  • array_walk() — Применяет заданную пользователем функцию к каждому элементу массива
  • array_values() — Возвращает все значения массива
  • array_map() — Применяет callback-функцию ко всем элементам указанных массивов

Improve This Page

User Contributed Notes 12 notes

11 years ago

If two keys are the same, the second one prevails.

Example:
print_r ( array_combine (Array( ‘a’ , ‘a’ , ‘b’ ), Array( 1 , 2 , 3 )));
?>
Returns:
Array
(
[a] => 2
[b] => 3
)

But if you need to keep all values, you can use the function below:

function array_combine_ ( $keys , $values )
$result = array();
foreach ( $keys as $i => $k ) $result [ $k ][] = $values [ $i ];
>
array_walk ( $result , create_function ( ‘&$v’ , ‘$v = (count($v) == 1)? array_pop($v): $v;’ ));
return $result ;
>

print_r ( array_combine_ (Array( ‘a’ , ‘a’ , ‘b’ ), Array( 1 , 2 , 3 )));
?>
Returns:
Array
(
[a] => Array
(
[0] => 1
[1] => 2
)

8 years ago

Further to loreiorg’s script
in order to preserve duplicate keys when combining arrays.

I have modified the script to use a closure instead of create_function

Reason: see security issue flagged up in the documentation concerning create_function

function array_combine_ ( $keys , $values ) $result = array();

foreach ( $keys as $i => $k ) $result [ $k ][] = $values [ $i ];
>

14 years ago

array_combine() has a strange bug/misfeature (as of PHP 5.3.2): There is no logical reason for throwing a warning and returning FALSE, instead of returning (see http://bugs.php.net/bug.php?id=34857). Here is a quick workaround:
function array_real_combine ( $a , $b )
return $a ===array() && $b ===array() ? array() : array_combine ( $a , $b );
>
?>

15 years ago

// If they are not of same size, here is solution:

$abbreviations = array( «AL» , «AK» , «AZ» , «AR» , «TX» , «CA» );
$states = array( «Alabama» , «Alaska» , «Arizona» , «Arkansas» );
function combine_arr ( $a , $b )
<
$acount = count ( $a );
$bcount = count ( $b );
$size = ( $acount > $bcount ) ? $bcount : $acount ;
$a = array_slice ( $a , 0 , $size );
$b = array_slice ( $b , 0 , $size );
return array_combine ( $a , $b );
>
$combined = combine_arr ( $abbreviations , $states );
print_r ( $combined );

// Output
// Array ( [AL] => Alabama [AK] => Alaska [AZ] => Arizona
// [AR] => Arkansas )
?>

6 years ago

I had an epiphany when try to handle NON-ASSOCIATIVE array forms in my controller. This little one liner can pretty much edit ANY kind of non-associative array. For example this one just returns an array of values inputed by a new user.

The $data value is the the json_decoded() value of a register form.
Here is used str_replace, you could definitely do a number of things like preg matches and other things.

$readyToProcessForUser = array_combine(str_replace(«new_user_», «», array_keys($data)), $data);

You could also do the same for the values.

$readyToProcessForUser = array_combine(array_keys($data), str_replace(«-«, «», $data));

Or BOTH!
Use full if you don’t want to walk an entire array and the keys through the same callback.

$readyToProcessForUser = array_combine(array_walk(‘trim’, array_keys($data)), array_walk(‘custom_callback’, array_values($data)));

13 years ago

If two keys are the same, the second one prevails.
Example:
print_r ( array_combine (Array( ‘a’ , ‘a’ , ‘b’ ), Array( 1 , 2 , 3 )));
?>
Returns:
Array
(
[a] => 2
[b] => 3
)

12 years ago

I needed to read CSV files into associative arrays with column headers as keys. Then I ran into a problem when you have empty columns at the end of a row because array_combine returns false if both arrays don’t have the same number of elements. This function based on quecoder at gmail’s combine_arr() below allowed me to pad either array or not when parsing my CSVs to arrays.
$a is the array of header columns and $b is an array of the current row retrieved with fgetcsv()

function array_combine_special ( $a , $b , $pad = TRUE ) $acount = count ( $a );
$bcount = count ( $b );
// more elements in $a than $b but we don’t want to pad either
if (! $pad ) $size = ( $acount > $bcount ) ? $bcount : $acount ;
$a = array_slice ( $a , 0 , $size );
$b = array_slice ( $b , 0 , $size );
> else // more headers than row fields
if ( $acount > $bcount ) $more = $acount — $bcount ;
// how many fields are we missing at the end of the second array?
// Add empty strings to ensure arrays $a and $b have same number of elements
$more = $acount — $bcount ;
for( $i = 0 ; $i < $more ; $i ++) $b [] = "" ;
>
// more fields than headers
> else if ( $acount < $bcount ) $more = $bcount - $acount ;
// fewer elements in the first array, add extra keys
for( $i = 0 ; $i < $more ; $i ++) $key = 'extra_field_0' . $i ;
$a [] = $key ;
>

return array_combine ( $a , $b );
>
?>

9 years ago

I recently had to flip an array and group the elements by value, this snippet will do that:
function flipAndGroup ( $input ) $outArr = array();
array_walk ( $input , function( $value , $key ) use (& $outArr ) if(!isset( $outArr [ $value ]) || ! is_array ( $outArr [ $value ])) $outArr [ $value ] = [];
>
$outArr [ $value ][] = $key ;
>);
return $outArr ;
>
?>

Example:
$users_countries = array(
‘username1’ => ‘US’ ,
‘user2’ => ‘US’ ,
‘newuser’ => ‘GB’
);
print_r ( flipAndGroup ( $users_countries ));
?>

Returns:
Array
(
[US] => Array
(
[0] => username1
[1] => user2
)

14 years ago

I needed a function that would take keys from one unequal array and combine them with the values of another. Real life application:
Select 4 product types.
Each product has a serial.
There are 4 sets of products.

function array_combine2 ( $arr1 , $arr2 ) $count1 = count ( $arr1 );
$count2 = count ( $arr2 );
$numofloops = $count2 / $count1 ;

$i = 0 ;
while( $i < $numofloops )$arr3 = array_slice ( $arr2 , $count1 * $i , $count1 );
$arr4 [] = array_combine ( $arr1 , $arr3 );
$i ++;
>

return $arr4 ;
>
?>

Input:
Array
(
[0] => SMART Board
[1] => Projector
[2] => Speakers
[3] => Splitter
)
, Array
(
[0] => serial to smart board1
[1] => serial to projector 1
[2] => serial to speakers 1
[3] => serials to splitter 1
[4] => serials to smart board 2
[5] => serials to projector 2
[6] => serials to speakers 2
[7] => serials to splitter 2
)

Array
(
[0] => Array
(
[SMART Board] => serial to smart board1
[Projector] => serial to projector 1
[Speakers] => serial to speakers 1
[Splitter] => serials to splitter 1
)

[1] => Array
(
[SMART Board] => serials to smart board 2
[Projector] => serials to projector 2
[Speakers] => serials to speakers 2
[Splitter] => serials to splitter 2
)

11 years ago

I was looking for a function that could combine an array to multiple one, for my MySQL GROUP_CONCAT() query, so I made this function.

function array_combine_array (array $keys )
$arrays = func_get_args ();
$keys = array_shift ( $arrays );

/* Checking if arrays are on the same model (array(‘INDEX’=> array()) or array()) */
$check = count ( array_unique ( array_map ( ‘is_array’ , array_map ( ‘current’ , $arrays )))) === 1 ;
if (! $check )

/* Checking the model of arrays, array(‘INDEX’ => array()) or Array() */
$assocArray = is_array ( array_shift ( array_map ( ‘current’ , $arrays )));

/* If empty $Keys is given, we fill an empty array */
if (empty( $keys )) $keys = array_keys ( array_fill ( 0 , max (( $assocArray ) ? array_map ( ‘count’ , array_map ( ‘current’ , $arrays )) : array_map ( ‘count’ , $arrays )), ‘foo’ ));

/* Init */
$ret =array(); $i = 0 ;
/* Cycling on each keys values, making an offset for each */
foreach( $keys as $v )
/* Cycling on arrays */
foreach ( $arrays as $k )
if ( $assocArray )
/* Getting the index of the element */
$key = key ( $k );
/* If the offset exists, we place it */
$ret [ $v ][ $key ] = isset( $k [ $key ][ $i ]) ? $k [ $key ][ $i ]: false ;
>
/* Making the array with auto-made index */
else
$ret [ $v ][] = isset( $k [ $i ]) ? $k [ $i ]: false ;
>
/* Getting the next offset */
$i ++;
>
return $ret ;
>

/* Examples */
$r = array( 1 , 2 , 4 , 10 );

$a1 = array( ‘one’ , ‘two’ , ‘four’ , ‘ten’ );
$a2 = array( ‘un’ , ‘deux’ , ‘quatre’ , ‘dix’ );
$a3 = array( ‘uno’ , ‘dos’ , ‘quatro’ , ‘diez’ );

print_r ( array_combine_array ( $r ,array( ‘english’ => $a1 ),array( ‘french’ => $a2 ),array( ‘spanish’ => $a3 ))); /* Associative index, associative subarray indexes */
print_r ( array_combine_array ( $r , $a1 ,array( ‘french’ => $a2 ),array( ‘spanish’ => $a3 ))); /* Ouputs Error */
print_r ( array_combine_array ( $r , $a1 , $a2 , $a3 )); /* Associative index, auto-made subarray indexes */
print_r ( array_combine_array (array(),array( ‘english’ => $a1 ),array( ‘french’ => $a2 ),array( ‘spanish’ => $a3 ))); /* Auto-made index, associative subarray indexes */
?>

12 years ago

I needed a function that truncated extra values, and only went as far as keys without throwing a warning as array_combine does.

function safeArrayCombine ( $keys , $values ) <
$combinedArray = array();

for ( $i = 0 , $keyCount = count ( $keys ); $i < $keyCount ; $i ++) <
$combinedArray [ $keys [ $i ]] = $values [ $i ];
>

6 years ago

This will seem obvious to some, but if you need to preserve a duplicate key, being you have unique vars, you can switch the array_combine around, to where the vars are the keys, and this will output correctly.

This [default] formula auto-removes the duplicate keys.

$i=0;
foreach (array_combine($keys, $vars) as $key => $var)
$i=$i;
echo($key);
echo » «;
echo($var);
>

This formula accomplishes the same thing, in the same order, but the duplicate «keys» (which are now vars) are kept.

$i=0;
foreach (array_combine($vars, $keys) as $var => $key)
$i=$i;
echo($key);
echo » «;
echo($var);
>

I know, I’m a newbie, but perhaps someone else will need this eventually. I couldn’t find another solution anywhere.

  • Функции для работы с массивами
    • array_​change_​key_​case
    • array_​chunk
    • array_​column
    • array_​combine
    • array_​count_​values
    • array_​diff_​assoc
    • array_​diff_​key
    • array_​diff_​uassoc
    • array_​diff_​ukey
    • array_​diff
    • array_​fill_​keys
    • array_​fill
    • array_​filter
    • array_​flip
    • array_​intersect_​assoc
    • array_​intersect_​key
    • array_​intersect_​uassoc
    • array_​intersect_​ukey
    • array_​intersect
    • array_​is_​list
    • array_​key_​exists
    • array_​key_​first
    • array_​key_​last
    • array_​keys
    • array_​map
    • array_​merge_​recursive
    • array_​merge
    • array_​multisort
    • array_​pad
    • array_​pop
    • array_​product
    • array_​push
    • array_​rand
    • array_​reduce
    • array_​replace_​recursive
    • array_​replace
    • array_​reverse
    • array_​search
    • array_​shift
    • array_​slice
    • array_​splice
    • array_​sum
    • array_​udiff_​assoc
    • array_​udiff_​uassoc
    • array_​udiff
    • array_​uintersect_​assoc
    • array_​uintersect_​uassoc
    • array_​uintersect
    • array_​unique
    • array_​unshift
    • array_​values
    • array_​walk_​recursive
    • array_​walk
    • array
    • arsort
    • asort
    • compact
    • count
    • current
    • end
    • extract
    • in_​array
    • key_​exists
    • key
    • krsort
    • ksort
    • list
    • natcasesort
    • natsort
    • next
    • pos
    • prev
    • range
    • reset
    • rsort
    • shuffle
    • sizeof
    • sort
    • uasort
    • uksort
    • usort
    • each
    • Copyright © 2001-2024 The PHP Group
    • My PHP.net
    • Contact
    • Other PHP.net sites
    • Privacy policy

    объединить массивы php в один

    Спасибо! попробовал, вот что получилось Array ( [0] => Array ( [0] => 2497 [1] => 2497 ) [1] => Array ( [0] => В наличии [1] => В наличии ) ) Array ( [0] => Array ( [0] => 2482 [1] => 2482 ) [1] => Array ( [0] => В наличии [1] => В наличии ) )

    Commented 6 дек 2023 в 4:48

    1 ответ 1

    Сортировка: Сброс на вариант по умолчанию

    Ответ прост: использовать array_column

    $result = array_column($myarr, 'VALUE'); 

    Отслеживать
    ответ дан 6 дек 2023 в 4:52
    Алексей Шиманский Алексей Шиманский
    74.1k 12 12 золотых знаков 93 93 серебряных знака 182 182 бронзовых знака
    В итоге пусто Array ( ) Array ( )
    Commented 6 дек 2023 в 4:59

    @baltimor значит ты привёл неправильный массив. потому что наглядный пример onlinephp.io/c/6a540 показывает всё вполне нормально. и уж точно результат не должен показывать Array ( ) Array ( ) , потому что результатом будет один массив

    Commented 6 дек 2023 в 5:05
    В том то и дело, что это два отдельных массива. paste.ofcode.org/wfmYwK2QuNBF47TRsnye9S
    Commented 6 дек 2023 в 5:06

    Так они же у тебя лежат в отдельной переменной $myarr , то есть это массив с массивами. Или я не прав?

    Commented 6 дек 2023 в 5:07

    Вот код paste.ofcode.org/36spjXHFESYJNpWU77bZQm6 В переменной $arResult[‘PROPERTIES’][‘ASSOCIATED’][‘VALUE’] хранятся ID Я пытаюсь отфильтровать эти ID с помощью свойства [‘PROPERTY_STATUS_VALUE’] Если в наличии, то выводить этот ID если нет, то не выводить, или убрать из этого массива

    Объединить все элементы списка в строку (с разделителем)

    Есть массив данных parameters типа string. Нужно пройтись в цикле по каждой строке в массиве и присвоить новому параметру значение строки. Есть следующий код:

    for string in parameters: glob_param, glob_param1, glob_param2, glob_param3, glob_param4 = string full_data = ('%(glob_param)s %(glob_param1)s %(glob_param2)s %(glob_param3)s %(glob_param4)s' % ) 

    Проблема в том, что я каждый раз не знаю сколько параметров у меня будет в parameters , и соответственно сколько нужно glob_param . Нужно в цикле определить необходимое количество и выполнить присваивание.

    Отслеживать

    149k 12 12 золотых знаков 60 60 серебряных знаков 133 133 бронзовых знака

    Как преобразовать массив в строку в PHP?

    Узнайте несколько способов преобразования массива в строку в PHP и наоборот. Решите проблему «PHP Notice: Array to string conversion» и научитесь использовать функции implode(), serialize(), json_encode(), print_r(), var_dump() и var_export().

    Cодержание

    • 1. Функция implode()
    • 2. Функция serialize()
    • 3. Функция json_encode()
    • 4. Функции print_r(), var_dump() и var_export()

    В PHP существует несколько способов преобразования массива в строку в зависимости от ваших целей и задач. Если вы столкнулись с проблемой «PHP Notice: Array to string conversion», то, скорее всего, в какой-то части вашего кода вы используете массив, но обрабатываете его как строку. В этой статье мы рассмотрим несколько инструментов, которые помогут вам преобразовать массив в строку и наоборот.

    PHP - Как преобразовать массив в строку

    1. Функция implode()

    Функция implode() позволяет объединить элементы массива в строку с помощью заданного разделителя. Этот метод подходит для одномерных массивов, но при этом ключи массива будут потеряны. Вот пример использования:

     $array = array('apple', 'banana', 'orange'); $string = implode(',', $array); echo $string; // Выводит: apple,banana,orange 

    Вы также можете использовать функцию explode(), чтобы преобразовать строку обратно в массив, используя тот же разделитель.

    PHP - Как преобразовать массив в строку

    2. Функция serialize()

    Функция serialize() позволяет преобразовать массив в строку, которую можно сохранить, передать или использовать для последующего восстановления массива. Сериализация полезна, когда вам нужно сохранить массив в файле или базе данных. Вот пример использования:

     $array = array('apple', 'banana', 'orange'); $string = serialize($array); echo $string; // Выводит: a:3:

    Вы также можете использовать функцию unserialize(), чтобы восстановить массив из строки.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *