Помогите с выборкой значений из массива

Тема в разделе "PHP", создана пользователем rasandrey, 1 мар 2011.

Модераторы: latteo
  1. rasandrey

    rasandrey

    Регистр.:
    2 апр 2009
    Сообщения:
    214
    Симпатии:
    6
    Есть массив вида
    PHP:
    Array
    (
        [
    0] => Array
            (
                [
    0] => 20
            
    )

        [
    1] => Array
            (
                [
    0] => 20
            
    )

        [
    2] => Array
            (
                [
    0] => 20
            
    )

        [
    3] => Array
            (
                [
    0] => 20
            
    )

        [
    4] => Array
            (
                [
    0] => 93
            
    )

    )
    Нужно в итоге получить новый массив, который будет иметь вид

    PHP:
    Array
    (
        [
    номер] => Array
            (
                [
    0] => значение
                
    [1] => число повторений

            
    )


    )
    Т.е. построить новый массив, методом перебора старого, и если значение повторяется (в нашем случае "20"), то в новом массиве будет указано сколько именно раз повторяется.
     
  2. Ramazan

    Ramazan пыщ-пыщ

    Регистр.:
    28 янв 2007
    Сообщения:
    471
    Симпатии:
    98
    PHP:
    $stored = array();
    $result = array();

    foreach(
    $array as $item)
    {
        if(!isset(
    $stored[$item[0]]))
            
    $stored[$item[0]] = 0;
        else
            
    $stored[$item[0]] ++;
    }

    foreach(
    $stored as $item => $iteration)
    {
        
    $result[] = array($itemiteration);
    }
     
    rasandrey нравится это.
  3. rasandrey

    rasandrey

    Регистр.:
    2 апр 2009
    Сообщения:
    214
    Симпатии:
    6
    еще вопрос по тем же массивам:
    Есть таблица sql, в ней 3 поля (id,id2,name)
    В каждой записи могут быть одинаковые значения полей id,name по сравнению с остальными
    Нужно выбрать из таблицы все записи и сформировать массив, но если ячейка в массиве с таким id и name уже есть в предыдущей ячейке, то пропустить.
    Помогите плиз
    Делаю так, но выбираем максимум 2 записи
    PHP:
            $q mysql_query("select * from table") or die(mysql_error()) ;
            
    $har2 = array() ;
            
            
    $m ;
            while(
    $row mysql_fetch_row($q)) {
                
    $k ;
                foreach(
    $har2 as $k=>$v) {
                    if(
    $v[0] == $row[0] && $v[2] == $row[2]) $k ;
                }
                if(
    $k == 0) {
                    
    $har2[$m] = $row ;
                    
    $m ++ ;
                }
            }
     
  4. Mongolor

    Mongolor

    Регистр.:
    5 дек 2007
    Сообщения:
    157
    Симпатии:
    29
    тебе бы условие if($k == 0) включить в foreach, может в этом проблема
    что-то вроде
    PHP:

            $q 
    mysql_query("select * from table") or die(mysql_error()) ;
            
    $har2 = array() ;
            
            
    $m ;
            while(
    $row mysql_fetch_row($q)) {
                
    $k ;
                foreach(
    $har2 as $k=>$v) {
                 if(
    $v[0] != $row[0] && $v[2] != $row[2])
            {
                    
    $har2[$m] = $row ;
                    
    $m ++ ;
                    }
                }
            }

     
  5. diavolic

    diavolic

    Регистр.:
    17 мар 2010
    Сообщения:
    522
    Симпатии:
    102
    PHP:
            $q mysql_query("select * from table") or die(mysql_error()) ;
            
    $har2 = array() ;
            while(
    $row mysql_fetch_row($q)) {
                    
    $har2[$row[0].$row[2]] = $row 
    адресация в массиве, как мы помним, может быть как цифровой так и ассоциативной :)
     
    rasandrey нравится это.
  6. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    в MySQL есть функция DISTINCT для выборки уникальных значений по заданным полям. И не надо изобретать велосипед, когда всю логику можно реализовать одним sql-запросом.