Здравствуйте. Пытаюсь решить такую задачу: Исходные данные 2 массива и переменная: массив 1 PHP: $results = array( array("id_state" => 0, "name" => "Имя 0"), array("id_state" => 1, "name" => "Имя 1"), array("id_state" => 2, "name" => "Имя 2"), array("id_state" => 3, "name" => "Имя 3"), ... ); массив 2 PHP: $results_needed = array( array("id_curr_state" => 0, "id_needed" => 1), array("id_curr_state" => 0, "id_needed" => 3), array("id_curr_state" => 2, "id_needed" => 3), ); переменная PHP: $id_current_state = 1; Необходимо в массиве 1 оставить только те элементы, которые удовлетворяют любому из двух условий (не удовлетворяющие нужно удалить): - если значения $id_current_state нет среди значений id_curr_state из массива 2, то удалять ничего не надо - если значение $id_current_state есть среди значений id_curr_state из массива 2, то оставить нужно те значения, у которых PHP: $results_needed[][id_needed] == $result[id_state] and $results_needed[][id_curr_state] == $id_current_state Т.е. для $id_current_state = 1 - оставить все для $id_current_state = 0 - оставить id_state = 1 и 3 для $id_current_state = 2 - оставить id_state = 3 Мои тщетные потуги за кончились на этом: PHP: foreach ($results as $result) { } Поиск привел к использованию array_keys(), array_values(), array_key_exists(), и in_array(). Но как их использовать в случае вложенных массивов чего-то я не понял. Прошу помощи
Я запутался в задании, когда всё прочитал. Т.е. для $id_current_state = 1 - оставить все для $id_current_state = 0 - оставить id_state = 1 и 3 для $id_current_state = 2 - оставить id_state = 3 Типа такого? PHP: <?php $results = array( array("id_state" => 0, "name" => "Имя 0"), array("id_state" => 1, "name" => "Имя 1"), array("id_state" => 2, "name" => "Имя 2"), array("id_state" => 3, "name" => "Имя 3") ); function foo($arr, $id) { foreach($arr as $mas) { if (in_array($id, $mas)) { if($id === 1) { echo '<pre>'; print_r($arr); echo '</pre>'; return; } if($id === 0) { echo '<pre>'; print_r($arr[1]); echo '</pre>'; echo '<pre>'; print_r($arr[3]); echo '</pre>'; return; } if($id === 2) { echo '<pre>'; print_r($arr[3]); echo '</pre>'; return; } } } } $id_current_state = 1; foo($results, $id_current_state); echo '---------------'; $id_current_state = 0; foo($results, $id_current_state); echo '---------------'; $id_current_state = 2; foo($results, $id_current_state);
Спасибо за отклик Не так Если значения $id_current_state нет среди значений элементов id_curr_state ААА , то ничего с массивом не делать. А если значение $id_current_state (например 0) есть, то в массиве $results нужно оставить только те элементы, id_state которых находятся в значениях соответствующего ключа id_needed остальные удалить.
Для начала я бы преобразовал Ваш второй массив к такому виду: Код (Text): $results_needed = [ 0 =>[ 1, 3], 2 => [3]]; Вот таким способом: PHP: $arr2 = []; foreach ( $results_needed as $v) { $arr2[ $v[ 'id_curr_state'] ][ ] = $v['id_needed']; } А потом удаление с проверкой: PHP: if ( isset ( $arr2[ $id_current_state ] ) ) { $arr1 = []; foreach ( $results as $v ) { if ( in_array($v['id_state'], $arr2[ $id_current_state ] ) ) { $arr1[] = $v; } } } else { $arr1 = $results; }
Со второй частью все понятно А вот с первой не совсем Мне кажется что массив станет PHP: $results_needed = [ 0 =>[1],0 =>[3], 2 => [3]]; Или я ошибаюсь? Спасибо