помогите пожалуйста разобраться. есть многомерный массив, хочу проверить присутствует ли значение в каком либо массиве и если найдено, то удалить второй массив(не по счёту второй, а тот в котором найдено значение). проблема следующая - если это 2 массива - то без проблем... а если 50 массивов, как сравнить например элемент 23 массива с элементом 32 Код (Text): $s = array(array(1,2,3,5),array(0,2,14,8),array(10,2,18,28)); if($s['0']['1'] == $s['1']['1']){ unset($s['1']); echo "yes"; print_r($s); }else{ echo "no"; }
А если попробовать перебрать массивы циклом к примеру $s['i']['j'] И перебирать i,j подставляя значения?
так чтоли... Код (Text): function recursion($arr) { if(is_array($arr)) { for($i=0; $i<count($arr); $i++) { if(is_array($arr[$i])) { recursion($arr[$i]); } else { echo $arr[$i].'<br>'; } } } else { echo $arr.'<br>'; } } // Вывод на монитор recursion($s); вот что-то наваял..... Код (Text): $s = array(array('first',2,3,5),array('second',2,8,15),array('tri',22,88,55),array('four',2,9,11),array('five',2,99,111)); foreach ($s as $s_data){ $i = -1; foreach($s_data as $s_d){ if($s[$i]['1'] == $s[$i]['1']){ $i++; //echo "yes"; print_r($s_data[$i]); echo '<br>'; }else{ echo "no"; } } } смущает конструкция Код (Text): if($s[$i]['1'] == $s[$i]['1']){
вот так ещё... Код (Text): $s = array(array('first',2,3,5),array('second',2,8,15),array('tri',22,88,55),array('four',2,9,11),array('five',2,99,111)); for($i=0; $i < count($s); $i++){ for($q=0; $q < count($s[$i]); $q++){ echo " -> ".$s[$i][$q]; } echo "<br>"; } но как сравнить значения массивов друг с другом и удалить те массивы которых по 2, чтоб не было массивов с одинаковыми значениями
люди!!! подскажите!! ну пожалуйста, я не пойму как сравнить $s[$i]['1'] == $s[$i]['1'] ------ что я не так делаю array_walk_recursive судя по описанию, можно применить в моём случае, но как?! не пойму.
array_diff и array_intersect точно не пододят к вашей задаче? если проблема в многомерности, то можно применить "распрямление" массивов и затем искать пересечение.
Вот твой изначальный массив из примера: Код (PHP): $s = array(array('first',2,3,5),array('second',2,8,15),array('tri',22,88,55),array('four',2,9,11),array('five',2,99,111)); А теперь напиши, каким он должен стать после обработки? А то я, например, текстовое описание задачи как-то... недопонимаю.
$s = array(array('first',2,3,5),array('tri',22,88,55)); вот таким. т.е. хочу удалить все массивы в которых содержится элемент arr[1] одинаковый т.е. цифра "2" в моём случае. При нахождении повторяющегося значения в разных массивах - удалить массив(ну чтоб был только один массив с таким значением в конкретном индексе) ..ну вроде понятно рассказал
А сравниваем - только элементы массива с индексом 1? Ну, т.е. получается, только первую цифру каждого массива берём для сравнения, остальные нас не интересуют? Вопрос к ТС
Вот такое получилось. Код (PHP): <?php $s = array( array('first', 2, 3, 5), array('second', 2, 8, 15), array('tri', 22, 88, 55), array('four', 2, 9, 11), array('five', 2, 99, 111) ); foreach($s as $key1 => $data1) { $unset = false; foreach($s as $key2 => $data2) { if($key2 == $key1) { $unset = true; continue; } if($unset and $data1[1] == $data2[1]) unset($s[$key2]); } } echo('<pre>'); print_r($s); ?> Наверно можно подумать над оптимизацией, а может и есть какая-то готовая функция для упрощения этого. Но думать - сейчас лень
аааа! капец!! то что надо! спасибо. Не пришла мне в голову мысль о том что сравнивать массивы надо пройти в цикле один и тот же массив 2 раза!!! Код (Text): foreach($s as $key1 => $data1) а потом foreach($s as $key2 => $data2) спасибо огромное!!!
а как на счет такой идеи: Код (Text): $array = array_merge($array1, $array2); $array = array_unique($array);
такая идея была бы проще всего еслиб ф-ция array_unique могла удалять одинаковые массивы а не только одинаковые элементы одного массива но.. к сожалению и Замечание: Обратите внимание, что array_unique() не предназначена для работы с многомерными массивами. (это из мануала)