Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (2) [1] 2  ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Как организовать поиск в многомерном массиве, нужен подсчет количества элементов
Strannik  
 ۩  [x]    Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 806
Пользователь №: 17108
На форуме: 7 лет, 8 месяцев, 23 дня
Карма: 0




Добрый день.

В продолжение данной темы

Есть массив:

$arr = array();
$arr[0] = array(2628927 => "8250843");
$arr[1] = array(2628927 => "8250843");
$arr[2] = array(2783907 => "8250843");
$arr[3] = array(2783907 => "8250843");
$arr[4] = array(2648250 => "8250843");
$arr[5] = array(2628927 => "8250843");

$arr1 = array();



уникальные связки ключ=> значение, получаю при помощи

foreach($arr as $a)
{
if(!in_array($a, $arr1)){
$arr1[] = $a;
}
}


за что отдельное спасибо kovaldm и SlavaFr

затем я вывожу значения уникальных связок
foreach ($arr1 as $keys => $elms ) {
foreach ( $elms as $key => $val ) {
echo "$key = $val<br>";

//как подсчитать сколько раз связка $key = $val встречается в общем массиве $arr ?

}
}


Как это сделать?
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
OleKh  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 753
Пользователь №: 32032
На форуме: 4 года, 8 месяцев, 1 день
Карма: 18




$arr1 = array(); // $arr1 - пустой массив


if(!in_array($a, $arr1)// если в пустом массиве нет $a


PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Strannik  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 806
Пользователь №: 17108
На форуме: 7 лет, 8 месяцев, 23 дня
Карма: 0




Цитата (OleKh @ 16.12.2012 - 11:33)
$arr1 = array(); // $arr1 - пустой массив


if(!in_array($a, $arr1)// если в пустом массиве нет $a

данный код проверяет есть ли в массиве значение..
а как подсчитать какое количество раз встречается связка $key=>$val в массиве $arr ?
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
OleKh  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 753
Пользователь №: 32032
На форуме: 4 года, 8 месяцев, 1 день
Карма: 18




if(!in_array($a, $arr1)


Разве $a это не массив? Разве тут не должна быть строка для поиска в пустом массиве $arr1?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Strannik  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 806
Пользователь №: 17108
На форуме: 7 лет, 8 месяцев, 23 дня
Карма: 0




Цитата (OleKh @ 16.12.2012 - 11:56)
if(!in_array($a, $arr1)


Разве $a это не массив? Разве тут не должна быть строка для поиска в пустом массиве $arr1?

может быть я не о том думаю, но судя по логике, твой скрипт ищет есть ли в массиве значение, если нет, записывает в массив и так по кругу будет.
А мне нужно в самом цикле, там где я уже вывожу значение $key=>$val вывести количество раз которое $key=>$val встречается в массиве $arr
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
OleKh  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 753
Пользователь №: 32032
На форуме: 4 года, 8 месяцев, 1 день
Карма: 18




$arr = array();
$arr[0] = array(2628927 => "8250843");


массив многомерный,

array([0]=> array(2628927 => "8250843"))


значением массива $arr с ключем 0 должен быть другой массив array(2628927 => "8250843");


foreach($arr as $a)
{
if(!in_array($a, $arr1)){
$arr1[] = $a;
}
}


Поэтому и спрашивается что в данном случае в переменной $a?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Strannik  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 806
Пользователь №: 17108
На форуме: 7 лет, 8 месяцев, 23 дня
Карма: 0




Подсказали такое вот решение:

function foo($arr, $target) {
$data = array_count_values(array_map('serialize', $arr));
$key = serialize($target);
return isset($data[$key]) ? $data[$key] : 0;
}

$arr = array();
$arr[0] = array(2628927 => "8250843");
$arr[1] = array(2628927 => "8250843");
$arr[2] = array(2783907 => "8250843");
$arr[3] = array(2783907 => "8250843");
$arr[4] = array(2648250 => "8250843");
$arr[5] = array(2628927 => "8250843");

echo foo($arr, array(2628927 => "8250843"));


Думаю вопрос можно закрывать..
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Strannik  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 806
Пользователь №: 17108
На форуме: 7 лет, 8 месяцев, 23 дня
Карма: 0




Цитата (OleKh @ 16.12.2012 - 12:11)
$arr = array();
$arr[0] = array(2628927 => "8250843");


массив многомерный,

array([0]=> array(2628927 => "8250843"))


значением массива $arr с ключем 0 должен быть другой массив array(2628927 => "8250843");


foreach($arr as $a)
{
if(!in_array($a, $arr1)){
$arr1[] = $a;
}
}


Поэтому и спрашивается что в данном случае в переменной $a?

там идет занесение уникальных значений в массив
$a = 2628927 => "8250843"(например)
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
OleKh  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 753
Пользователь №: 32032
На форуме: 4 года, 8 месяцев, 1 день
Карма: 18




ок, не знал, что в качестве needle функции in_array() может быть массив, думал что только строка
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
OleKh  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 753
Пользователь №: 32032
На форуме: 4 года, 8 месяцев, 1 день
Карма: 18




$a = array (2628927 => "8250843");  // значение массива $arr.

if(!in_array($a, $arr1) // проверка на наличие $a в массиве $arr1.


Тут фишка в том, что после первой итерации, значение $a добавляется в массив $arr1, и при последующей попытке добавить уникальное значение, условие не сработает, т.к. изначально пустой массив уже будет заполнен уникальным значением.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Strannik  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 806
Пользователь №: 17108
На форуме: 7 лет, 8 месяцев, 23 дня
Карма: 0




я понял, только мне нужно было подсчитать количество элементов, а не получить массив с уникальными значениями..
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
OleKh  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 753
Пользователь №: 32032
На форуме: 4 года, 8 месяцев, 1 день
Карма: 18




Strannik
Понятно, что было понятно, это чтобы два раза на одни и те же грабли не наступать ), повторение - мать учения, а вот как думаете, зачем в подсказанном решении используется:
array_map('serialize', $arr)

?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Гость_Денис  
Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered









Здравствуйте!

Помогите, пожалуйста, разобраться с решением такой задачки...

Есть массив , для примера:
Array
(
[0] (...)
[1] (...)
[2] (...)
[3] => Array
(
[name] => Мобильные кондиционеры Air
[id] => 2190299927
[parentId] => 3886855096
[txt_parentCat] => Кондиционеры | Мобильные кондиционеры
)
)

Мне нужно произвести поиск по всему массиву по значению ключа [id]. Например, я ищу id=2190299927
После того, как значение в ключе [id] найдено, мне надо надо получить номер элемента - в примере это [4], чтобы затем я мог взять $array[4][name] и $array[4][txt_parentCat]

То есть, надо , проведя поиск по значению в конкретном ключе , получить порядковый номер этого элемента массива, чтобы можно было затем получить значения других ключей этого же элемента массива.
И вот что-то никак smile.gif

Заранее благодарю!
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Guest  
Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered









о, я тут сам нашел где туплю. На всякий случай выкладываю для таких же, невыспавшихся smile.gif

foreach ($category_arr as $id){
if ($id[id] == "2190299927") echo $id[txt_parentCat].' | '.$id[name];
}
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Valick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 5493
Пользователь №: 35718
На форуме: 4 года, 16 дней
Карма: 167




Цитата (Guest @ 4.11.2016 - 14:00)
На всякий случай выкладываю для таких же

зачем же выкладывать свои какашки на всеобщее обозрение...


--------------------
wmr - R281553014107
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (2) [1] 2  Ответ в темуСоздание новой темыСоздание опроса