Jump to content
  • entries
    6
  • comments
    13
  • views
    1,191

Однострочные решения

SooR

582 views

Лаконичные решения в одну строку, которые помогут в некоторых задачах.

 

#1. Читабельный артикул/код/любой числовой идентификатор. Разделение строки пробелами через каждые 2 символа.

// из 398830583 получаем 39 88 30 58 3
$sku = substr(chunk_split($product_info['sku'], 2, ' '), 0, -1);

#2. Вывод звезд рейтинга без цикла (Font Awesome 4)

<?php echo str_repeat('<i class="fa fa-star text-warning"></i>', $rating); ?><?php echo str_repeat('<i class="fa fa-star-o text-muted"></i>', (5 - $rating)); ?>

#3. Вывод текстовой колонки из двумерного массива в строку.

// Из массива товаров получаем их названия и выводим в строку через запятую
<?php echo implode(', ', array_column($products, 'name')); ?>

// Из того же массива получаем названия только первых 3-х товаров
<?php echo implode(', ', array_column(array_slice($products, 0, 3), 'name')); ?>

#4..

  • +1 7


2 Comments


Recommended Comments

#4. Не совсем однострочное, но полезное. Отображаем вызывающий класс и метод (аналог caller в js). Полезно при отлове инициатора редиректа через response->redirect() и т.д.

$backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);

echo '<b>' . $backtrace[1]['class'] . '</b>' . '->' . $backtrace[1]['function'] . ' (' . $backtrace[0]['line'] . ')<br />';

 

  • +1 2

Share this comment


Link to comment

#5. Фильтр приходящего массива по ключам

/*
$this->request->get = [
  'filter_category_id' => 10,
  'filter_manufacturer_id' => 20,
  'sort' => 'name',
  'order' => 'DESC',
];
*/

$filter_data = array_intersect_key($this->request->get, array_fill_keys([ 'filter_category_id', 'filter_manufacturer_id', 'filter_name' ], true));

/*
$filter_data = [
  'filter_category_id' => 10,
  'filter_manufacturer_id' => 20,
];
*/

Двумерный массив

/*
$products = [
  [
    'product_id' => 1,
    'name' => 'Product 1',
    'price' => '100.3',
    'quantity' => 2,
  ],    
  [
    'product_id' => 2,
    'name' => 'Product 2',
    'price' => '200.5',
    'quantity' => 1,
  ],   
];
*/

$products_filtered = array_map(function($v) {
  return array_intersect_key($v, array_fill_keys([ 'name', 'price' ], true));  
}, $products);

/*
$products_filtered = Array(
  [0] => Array (
     [name] => Product 1
     [price] => 100.3
  )

  [1] => Array (
     [name] => Product 2
     [price] => 200.5
  )
)
*/

 

  • +1 1

Share this comment


Link to comment
Guest
You are posting as a guest. If you have an account, please sign in.
Add a comment...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.