Skip to content

Instantly share code, notes, and snippets.

@YaroslavB
Forked from Kirill-Gorelov/array.php
Created March 30, 2021 07:38
Show Gist options
  • Select an option

  • Save YaroslavB/d4b4821eba587c5208ea2ccd3b5d3bef to your computer and use it in GitHub Desktop.

Select an option

Save YaroslavB/d4b4821eba587c5208ea2ccd3b5d3bef to your computer and use it in GitHub Desktop.
<?php
/****************** удаляем из массива ******************/
//массив из которого нужно удалить
$letters = array('(', ')', '[', ']', '{', '}','h', 'r','ff');
//массив данных, которые не трогаем
$no_delete = array('(', ')', '[', ']', '{', '}');
foreach($letters_new as $key => $char){
// если символ не в "запретном списке" - удалить его из массива
if(!in_array($char, $no_delete)) unset($letters_new[$key]);
//если нужно удалить символы, которые в массиве $no_delete
if(in_array($char, $no_delete)) unset($letters_new[$key]);
}
/*************** массив в файл и из файла ********************/
/************************************
Функция записи массива по строчно в файл
************************************/
function gomass($file, $massiv){
// exit();
foreach($massiv as $value) // запись хорошего массива
{
$str.= "\n" .$value;
}
$fp = fopen($file, "a"); // Открываем файл в режиме записи
$mytext = $str; // Исходная строка
$test = fwrite($fp, $mytext); // Запись в файл
fclose($fp); //Закрытие файла
}
/*********************
еще одна ункция записи массива в файл
*********************/
<pre>
<?php
function contextToString($context)
{
$export = '';
foreach ($context as $key => $value) {
$export .= "{$key}: ";
$export .= preg_replace(array(
'/=>\s+([a-zA-Z])/im',
'/array\(\s+\)/im',
'/^ |\G /m'
), array(
'=> $1',
'array()',
' '
), str_replace('array (', 'array(', var_export($value, true)));
$export .= PHP_EOL;
}
return str_replace(array('\\\\', '\\\''), array('\\', '\''), rtrim($export));
}
$response = [];
$response['result'] = '';
$response['result']['status'] = false;
$response['result']['error'] = '';
$response['result']['error']['code'] = 'error_server_account';
$response['result']['error']['description'] = 'Обратитесь в службу поддержки';
$response['data'] = 'err';
print(contextToString($response));
?>
</pre>
//output
result: array(
'status' => false,
'error' => array(
'code' => 'error_server_account',
'description' => 'Обратитесь в службу поддержки',
),
)
data: 'err'
/****************** из одномерного массива в двумерный ***********/
$array = Array('Аксессуары', 'Верхняя одежда', 'Для спорта', 'Нижнее белье', 'Обувь', 'Платье', 'Аксессуары2', 'Верхняя одежда2', 'Для спорта2', 'Нижнее белье', 'Обувь', 'Для девочек', 'Для мальчиков', 'Для новорожденных', 'Игрушки');
function parceArray(&$arr, $num = 5) {
$newArr = array();
foreach($arr as $i => $v) $newArr[floor($i / $num)]['key' . ($i++ % $num)] = $v;
return $newArr;
}
echo '<pre>';
print_r(parceArray($array, 5));
/***************** из двумерного массива в одномерный *****************/
//1 способ
function two_to_one($array){
$new = array();
foreach ($array as $key=>$val) {
foreach ($val as $k=>$v) {
$new[$k] = $v;
}
}
return $new;
}
// 2 способ
function two_to_one($array){
$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($array));
$arrOut = iterator_to_array($iterator, true);
return $arrOut;
}
// 3 способо, иногда нужно так
function two_to_one($array){
$new = array();
foreach ($array as $key=>$val) {
foreach ($val as $k=>$v) {
$new[] = $v;
}
}
return $new;
}
/************ удаление из одномерного массива по ключам ***************/
$arr = array('id' => 4, 'date_create' => '4.10.2013 20:47:52', 'name' => 'BCAA', 'depth_level' => 1, 'description' => null, 'searchable_content' => 'BCAA', 'code' => 'BCAA', 'detail_picture' => null);
$delete_keys = array('description', 'searchable_content', 'code', 'detail_picture');
$arr = array_diff_key($arr, array_flip($delete_keys)); // Only one line!
print_r($arr);
/************ удаление из двумерного массива по ключам ***************/
function del_item_arr($array){//сюда приходит массив
$delete_keys = array('DEFAULT_VALUE', 'SORT', 'MULTIPLE');
// print_r($array);
foreach ($array as $key => $value) {
$array_new[] = array_diff_key($value, array_flip($delete_keys));
}
return $array_new;
}
/*********** объединение двумерных массивов первый вариант **********/
$result = [];
array_walk_recursive($rez, function ($item, $key) use (&$result) {
$result[] = $item;
});
/*********** объединение двумерных массивов второй вариант **********/
<?php
//Enter your code here, enjoy!
$arr1 = array(
array('id' => 57, 'fullName' => 'Иванов Иван Иваныч', /* rest of the fields */),
array('id' => 250, 'fullName' => 'Сидоров Иван Иваныч', /* rest of the fields */),
array('id' => 2530, 'fullName' => 'Петров Иван Иваныч', /* rest of the fields */),
);
$arr2 = array(
array('ids' => 57, 'age' => 50),
array('ids' => 250, 'age' => 43),
array('ids' => 2530, 'age' => 33),
);
$arr1 = array_reduce($arr1, function (array $res, array $info) {
$res[$info['id']] = $info;
return $res;
}, array());
foreach ($arr2 as $ageInfo) {
$id = $ageInfo['ids'];
if(array_key_exists($id, $arr1)) {
//$arr1[$id] = array_merge($arr1[$id], $ageInfo);
$arr1[$id]['age'] = $ageInfo['age'];
}
}
print_r($arr1);
/*****************************
сортировка по алфавиту в двумерном массиве
****************************/
<pre>
$data = array
(
array( 'name' => 'привет 1', 'price' => 200 ),
array( 'name' => 'пока 2', 'price' => 100 ),
array( 'name' => 'ж 2', 'price' => 150, 'rr' => array('dfgh', 'dfghj')),
array( 'name' => 'а 2', 'price' => 110 ),
array( 'name' => 'б 2', 'price' => 1090 ),
);
//сортировка по алфавиту по имени
usort($data, function($a, $b){
return strcasecmp($a['name'], $b['name']);
});
//сортировка по возврастанию по цене
usort($data, function($a, $b){
return ($a['price'] - $b['price']);
});
print_r($data);
</pre>
?>
/**************
Удалить дубликаты из двумерного массива
***************/
$arr = array(array('a', 'b'), array('b', 'c'), array('a', 'b'), array('a', 'b'));
$result = array_reduce($arr, function($a, $b) {
static $stored = array();
$hash = md5(serialize($b));
if (!in_array($hash, $stored)) {
$stored[] = $hash;
$a[] = $b;
}
return $a;
}, array());
var_dump($result); // array(2) { [0]=> array(2) { [0]=> string(1) "a" [1]=> string(1) "b" } [1]=> array(2) { [0]=> string(1) "b" [1]=> string(1) "c" } }
/**********************
Поиск в многомерном массиве по значению (не по ключу)
**********************/
$out_data = array (
array("01_composita","Composita"),
array("02_composita_p","Composita Plus"),
array("03_contemporanea","Contemporanea"),
array("04_epc","Epc"),
array("05_hotel","Hotel"),
array("06_plain_filomuro","Plait Filomuro"),
array("07_pds","Pds"),
array("08_soluzione","Soluzione"),
array("09_teknoeuropa","Teknoeuropa"),
array("10_telemako","Telemako"),
array("08_soluzione","Telemako")
);
//Ищем
$needle = "08_soluzione";
//Собственно поиск
$result = array_filter($out_data, function($innerArray){
global $needle;
//return in_array($needle, $innerArray); //Поиск по всему массиву
return ($innerArray[0] == $needle); //Поиск по первому значению
});
//Результат
echo '<pre>'.print_r($result, true).'</pre>';
//и еще вариант с фильтрацией
function filterElement($array, $name){
$filtered = array_filter(
$array,
function ($item) use($name){
return $item->getType() == $name;
}
);
return $filtered;
}
/**************** Сортировка массива в алфавитном порядке **************/
//автор не я
$arr = array(
'Петя',
'Yury',
'Maxim',
'Юденок',
'Мыков',
'Obama',
'Артем',
'Янукович',
'Яша',
'Gerome'
);
function abc($a,$b){
$la = mb_substr($a,0,1,'utf-8');
$lb = mb_substr($b,0,1,'utf-8');
if(ord($la) > 122 && ord($lb) > 122){
return $a > $b ? 1 : -1;
}
if(ord($la) > 122 || ord($lb) > 122) {
return $a < $b ? 1 : -1;
}
}
uasort($arr, 'abc'); // или usort(), если сохранение ключей не важно
echo '<pre>';
print_r($arr);
echo '</pre>';
/**********************
удаление дубликатов по ключу
***********************/
<?php
function super_unique($array,$key)
{
$temp_array = [];
foreach ($array as &$v) {
if (!isset($temp_array[$v[$key]]))
$temp_array[$v[$key]] =& $v;
}
$array = array_values($temp_array);
return $array;
}
$arr="";
$arr[0]['id']=0;
$arr[0]['titel']="ABC";
$arr[1]['id']=1;
$arr[1]['titel']="DEF";
$arr[2]['id']=2;
$arr[2]['titel']="ABC";
$arr[3]['id']=3;
$arr[3]['titel']="XYZ";
echo "<pre>";
print_r($arr);
echo "unique*********************<br/>";
print_r(super_unique($arr,'titel'));
?>
/******************************
достать уникальные значения из многомерного массива
*****************************/
$b = array (
0 => array (
'id' => 1,
'pid' => 121,
'uuid' => 1,
),
1 => array (
'id' => 2,
'pid' => 13,
'uuid' => 1,
),
2 => array (
'id' => 5,
'pid' => 121,
'uuid' => 1,
)
);
$uniquePids = array_unique(array_map(function ($i) { return $i['pid']; }, $b));
var_dump($uniquePids);
/*******************************
уникальные элементы ассоциативного массива
********************************/
$a = array (
0 => array ( 'value' => 'America', ),
1 => array ( 'value' => 'England', ),
2 => array ( 'value' => 'Australia', ),
3 => array ( 'value' => 'America', ),
4 => array ( 'value' => 'England', ),
5 => array ( 'value' => 'Canada', ),
);
$tmp = array ();
foreach ($a as $row)
if (!in_array($row,$tmp)) array_push($tmp,$row);
print_r ($tmp);
/*****************************
первая буква из элементов массива
*****************************/
$array = [
[
'name' => 'Брянск'
],
[
'name' => 'Москва'
],
[
'name' => 'Можайск'
],
[
'name' => 'Барнуал'
],
[
'name' => 'Бобруйск'
],
[
'name' => 'Санкт-Петербург'
],
[
'name' => 'Дмитров'
],
[
'name' => 'Дубна'
],
];
# Сортируем по алфавиту
asort( $array );
# Формируем массив разбитый на категории
sorting( $array );
function sorting( & $array )
{
# "Память"
$memory = NULL;
# Новый массив
$sorting = array();
# Обходим массив
foreach( $array as $key=>$item )
{
# Получаем первую букву
$letter = mb_substr( $item['name'], 0, 1, 'utf-8' );
# Если текущая буква не равна предыдущей
if( $letter != $memory )
{
# Заносим букву в "память"
$memory = $letter;
# Добавляем новый массив
$sorting[$memory] = array();
}
# Дополняем массив
$sorting[$memory][$key] = $item;
}
# Назвачаем массив
$array = $sorting;
}
var_dump($array);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment