переформатировать многомерный массив на основе значения - PullRequest
0 голосов
/ 23 марта 2011

У меня есть массив в следующем формате

$op = Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [contact_id] => 36
                    [sender_id] => 79
                    [sendto] => 9192
                )

            [1] => Array
                (                       
                    [event_id] => 145
                    [sender_id] => 9139
                    [sendto] => 9192
                )

        )

    [1] => Array
        (
            [0] => Array
                (                       
                    [event_id] => 145
                    [sender_id] => 9272
                    [sendto] => 9290
                )

        )    
    [2] => Array
        (
            [0] => Array
                (                        
                    [event_id] => 145
                    [sender_id] => 9138
                    [sendto] => 9316
                )

            [1] => Array
                (                       
                    [event_id] => 145
                    [sender_id] => 9283
                    [sendto] => 9316
                )

        )
)  

Я хочу отфильтровать массив так, чтобы ключ результирующего массива должен был иметь разные значения sendto, и все sender_id под этим sendto должны прийтипод ключом этого массива

Желаемый вывод

Array
(
    [9192] => Array
        (
            [0] =>79
            [1] =>9139
        )
    [9290] =>Array
        (
            [0]=>9272
        )
    [9316] =>Array
        (
            [0] =>9138
            [1] =>9283
        )
)

, хотя я пробовал с кодом ниже

foreach ($op as $ok=>$ov)
{
    if( array_key_exists($ov['sendto'],$mid))
        $mid[$ov['sendto']][]=$ok;
    else
        $mid[$ov['sendto']]=$ok;
}

, но это одно отображение уведомление: неопределенный индекс: sendto

скажите пожалуйста, где я не так делаю ??я всегда застрял в такой проблеме

Ответы [ 3 ]

2 голосов
/ 23 марта 2011

Примерно так:

<?php
//Test Array
$op = array(
    array(
        array(
              'contact_id' => 36,
              'sender_id' => 79,
              'sendto' => 9192
        ),
        array(
              'contact_id' => 145,
              'sender_id' => 9139,
              'sendto' => 9192
        )
    ),
    array(
        array(
              'contact_id' => 145,
              'sender_id' => 9272,
              'sendto' => 9290
        )
    ),
    array(
        array(
              'contact_id' => 145,
              'sender_id' => 9138,
              'sendto' => 9316
        ),
        array(
              'contact_id' => 145,
              'sender_id' => 9283,
              'sendto' => 9316
        )
    ),
);

//Switch array format
$new = array();
foreach($op as $element)
{
    foreach($element as $entity)
    {
        if(!isset($new[$entity['sendto']]))
        {
           $new[$entity['sendto']] = array();
        }

        $new[$entity['sendto']][] = $entity['sender_id'];
    }
}

//Debug the new array.
print_r($new);
0 голосов
/ 23 марта 2011

Попробуйте:

$mid = array();

foreach($op as $tmp_array)
{
  foreach($tmp_array as $message)
  {
    if (!isset($mid[$message['sendto']]))
      $mid[$message['sendto']] = array();

    $mid[$message['sendto']][] = $message['sender_id'];
  }
}
0 голосов
/ 23 марта 2011

Вы должны пойти так:

foreach ($op as $ok=>$ov)
{
    if(!array_key_exists('sendto',$mid))
    {

        $mid[$ov['sendto']] = array();
    }

    $mid[$ov['sendto']][] = $ov['sender_id'];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...