Array - пользовательская функция foreach - PullRequest
1 голос
/ 02 марта 2012

У меня есть массив в этой форме:

$data = array(
        array(
            'id' => '1',
            'bar' => 'foo',
            'page' => 'front',
         ),
        array(
            'id' => 'bar',
            'bar' => 'foo',
            'page' => 'front',
         ),
        array(
            'id' => 'different,
            'bar' => 'bar',
            'page' => 'back',
         ),
        array(
            'id' => 'another',
            'title' => __("Custom CSS",'solidstyle_admin'), 
            'foo' => 'bar',
            'page' => 'back',
         ),
);

И я хочу перечислить все идентификаторы, сгруппированные по страницам и сохраненные как переменные, поэтому, если приведенный выше массив является входным, то вывод будет выглядеть такone:

$front = array('1','bar');
$back = array('different','another');
//$data['page'] = array($id1, $id2, (...));

Я пытался сделать это, используя foreach, и вот как это начинается:

function my_output() {
     foreach($data as $something) {
        $id = $something['id'];
        $page = $something['page'];

    }
   return $output;
}

Я пробовал несколько циклов foreach, и лучший результат, который я получил, был:

front = 1
front = bar
back = different
back = another 

Но я абсолютно не знаю, как добиться того, чего я хочу, я не хочу, чтобы кто-то делал свою работу, только какие-то намеки?Имейте в виду, что я немного новичок в PHP и не очень много знаю о массивах.

Спасибо!

Ответы [ 2 ]

1 голос
/ 02 марта 2012

Звучит так, как вы хотите:

$ids = array();

foreach ($data as $page) {
    $pageName = $page['page'];

    // create an empty array for your IDs
    if (!isset($ids[$pageName])) {
        $ids[$pageName] = array();
    }

    // add to the array of IDs
    $ids[$pageName][] = $page['id'];
}

var_dump($ids); // array('front' => array('1', 'bar'), ...
1 голос
/ 02 марта 2012

Придерживайтесь идеи цикла и сделайте условную проверку.

function my_output() { 
     $front = array();
     $back = array();

     foreach($data as $something) {
        $id = $something['id'];
        $page = $something['page'];
        if ($page === 'front') {
            $front[] = $id;
        } else if ($page === 'back') {
            $back[] = $id;
        }

    }

    // Not sure what you want to return here, but you could return an array of pages

   $output = array('front' => $front, 'back' => $back); 
   return $output;
}

Это вернет что-то похожее на:

$output = array(
    'front' => array(
        0 => '1',
        1 => 'bar',  
    ),
    'back' => array(
        0 => 'something',
        1 => 'another',  
    )
)

Редактировать : Помните, что мой ответ учитывает только две страницы, которые вы указали в своем ответе. Если у вас есть больше страниц, вы также можете использовать то, что показал ответ cbuckley.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...