странный массив php - PullRequest
       0

странный массив php

0 голосов
/ 12 января 2010

мой массив php выглядит так:

Array ( 
[0] => dummy 
[1] => stdClass Object ( 
    [aid] => 1 
    [atitle] => Ameya R. Kadam ) 
[2] => stdClass Object ( 
    [aid] => 2 
    [atitle] => Amritpal Singh ) 
[3] => stdClass Object ( 
    [aid] => 3 
    [atitle] => Anwar Syed ) 
[4] => stdClass Object ( 
    [aid] => 4 
    [atitle] => Aratrika )  
) )

Теперь я хочу отобразить значения внутри [atitle]. чтобы быть конкретным, я хочу добавить значения atitle в другую переменную. как я могу это сделать?

Ответы [ 6 ]

4 голосов
/ 12 января 2010

С PHP 5.3:

$result = array_map(function($element) { return $element->atitle; }, $array);

если у вас нет 5.3, вы должны сделать анонимную функцию обычной и указать имя в виде строки.


Выше я пропустил часть о пустом элементе, используя этот подход, это можно решить с помощью array_filter:

$array = array_filter($array, function($element) { return is_object($element); });
$result = array_map(function($element) { return $element->atitle; }, $array);

Если вы сошли с ума, вы можете написать это в одну строку ...

3 голосов
/ 12 января 2010

Ваш массив объявлен примерно так:
(Ну, вы, вероятно, в своем реальном случае получаете данные из базы данных или что-то в этом роде - но это должно быть хорошо, здесь, для тестирования)

$arr = array(
    'dummy',
    (object)array('aid' => 1, 'atitle' => 'Ameya R. Kadam'), 
    (object)array('aid' => 2, 'atitle' => 'Amritpal Singh'), 
    (object)array('aid' => 3, 'atitle' => 'Anwar Syed'), 
    (object)array('aid' => 4, 'atitle' => 'Aratrika'), 
);


Это означает, что вы можете извлечь все заголовки в массив, перебирая исходный массив (исключая первый элемент и используя свойство atitle каждого объекта) :

$titles = array();
$num = count($arr);
for ($i=1 ; $i<$num ; $i++) {
    $titles[] = $arr[$i]->atitle;
}
var_dump($titles);


Это даст вам массив, подобный этому:

array
  0 => string 'Ameya R. Kadam' (length=14)
  1 => string 'Amritpal Singh' (length=14)
  2 => string 'Anwar Syed' (length=10)
  3 => string 'Aratrika' (length=8)


И теперь вы можете implode все это в строку:

echo implode(', ', $titles);

И вы получите:

Ameya R. Kadam, Amritpal Singh, Anwar Syed, Aratrika
1 голос
/ 12 января 2010
foreach($array as $item){
    if(is_object($item) && isset($item->atitle)){
         echo $item->atitle;
    }
}

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

$resultArray = array();
foreach($array as $item){
    if(is_object($item) && isset($item->atitle)){
          $resultArray[] = $item->atitle;
    }
}

Тогда resultArray - это массив всех заголовков

Тогда вы можете выводить, как пожелаете

$output = implode(', ', $resultArray);
0 голосов
/ 12 января 2010
$yourArray = array(); //array from above
$atitleArray = array();

foreach($yourArray as $obj){
 if(is_object($obj)){
    $atitleArray[] = $obj->aTitle;
  }
}

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

0 голосов
/ 12 января 2010

Если вы хотите проверить наличие заголовка перед выводом, вы можете использовать:

// generates the title string from all found titles
$str = '';
foreach ($array AS $k => $v) {
    if (isset($v->title)) {
        $str .= $v->title;
    }
}
echo $str;

Если вы хотите получить их в массиве, это просто быстрый способ хранения:

// generates the title string from all found titles
$arr = array();
foreach ($array AS $k => $v) {
    if (isset($v->title)) {
        $arr[] = $v->title;
    }
}
echo implode(', ', $arr);

stdClass требует, чтобы вы использовали указатель -> для ссылок, тогда как массивы требуют, чтобы вы ссылались на них по индексу, т.е. [4]. Вы можете ссылаться на них как:

$array[0]
$array[1]->aid
$array[1]->atitle
$array[2]->aid
$array[2]->atitle
// etc, etc.
0 голосов
/ 12 января 2010

То, что у вас есть, есть объект.

Вы можете получить доступ к [atitle] через

$array[1]->atitle;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...