Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Удалить лишние элементы массива

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Огонек
Отправлено: 21 Июля, 2017 - 19:51:59
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Июль 2017  


Помог: 0 раз(а)




Здравствуйте.
Пытаюсь решить такую задачу:
Исходные данные 2 массива и переменная:
массив 1
PHP:
скопировать код в буфер обмена
  1.  
  2. $results = array(
  3. array("id_state" => 0,
  4.            "name" => "Имя 0"),
  5. array("id_state" => 1,
  6.            "name" => "Имя 1"),
  7. array("id_state" => 2,
  8.            "name" => "Имя 2"),
  9. array("id_state" => 3,
  10.            "name" => "Имя 3"),
  11. ...
  12. );
  13.  

массив 2
PHP:
скопировать код в буфер обмена
  1.  
  2. $results_needed = array(
  3. array("id_curr_state" => 0,
  4.            "id_needed" => 1),
  5. array("id_curr_state" => 0,
  6.            "id_needed" => 3),
  7. array("id_curr_state" => 2,
  8.            "id_needed" => 3),
  9. );
  10.  

переменная

Необходимо в массиве 1 оставить только те элементы, которые удовлетворяют любому из двух условий (не удовлетворяющие нужно удалить):
- если значения $id_current_state нет среди значений id_curr_state из массива 2, то удалять ничего не надо
- если значение $id_current_state есть среди значений id_curr_state из массива 2, то оставить нужно только те значения, которые указаны в соответствующих им элементах id_needed

Т.е. для $id_current_state = 1 - оставить все
для $id_current_state = 0 - оставить id_state = 1 и 3
для $id_current_state = 2 - оставить id_state = 3

Мои тщетные потуги за кончились на этом:

PHP:
скопировать код в буфер обмена
  1. foreach ($results as $result) {
  2.  
  3. }
  4.  

Поиск привел к использованию array_keys(), array_values(), array_key_exists(), и in_array().
Но как их использовать в случае вложенных массивов чего-то я не понял.
Прошу помощи
 
 Top
Sail
Отправлено: 21 Июля, 2017 - 22:18:57
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




Огонек, например, так:
PHP:
скопировать код в буфер обмена
  1. $arr = [];
  2. // собираем id_needed
  3. foreach($results_needed as $value) {
  4.     if($id_current_state == $value['id_curr_state']) {
  5.         $arr[] = $value['id_needed'];
  6.     }
  7. }
  8. var_dump($results, $results_needed, $id_current_state, $arr);
  9. if(!empty($arr)) { // фильтруем при необходимости
  10.     $results = array_filter($results, function($item) use ($arr) {return in_array($item['id_state'], $arr);});
  11. }
  12. var_dump($results);
 
 Top
Огонек
Отправлено: 22 Июля, 2017 - 08:44:19
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Июль 2017  


Помог: 0 раз(а)




Sail, спасибо.
Решение элегантное.
Форум не разрешает нажать вам спасибо (у меня пока мало сообщений). Как наберу нужное количество - обязательно нажму.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB