PHP - Извлечение свойства от массива объектов

У меня была аналогичная проблема, и выяснилось, что вся проблема такого характера может быть решена следующим образом:

  1. дает всем вашим элементам стиль.
  2. дает выбранный вами item style.
  3. дает следующие элементы стиль с использованием + или ~.

, и таким образом вы сможете стилизовать свои текущие предыдущие элементы (все элементы переопределены текущими и следующими элементами) и ваши следующие элементы.

пример:

/* all items (will be styled as previous) */
li {
  color: blue;
}

/* the item i want to distinguish */
li.milk {
  color: red;
}

/* next items */
li ~ li  {
  color: green;
}


<ul>
  <li>Tea</li>
  <li class="milk">Milk</li>
  <li>Juice</li>
  <li>others</li>
</ul>

Надеюсь, что это кому-то поможет.

111
задан SilentGhost 13 July 2009 в 12:19
поделиться

5 ответов

Вы можете использовать функцию array_map () .
Это должно сработать:

$catIds = array_map(create_function('$o', 'return $o->id;'), $objects);
149
ответ дан 24 November 2019 в 02:56
поделиться
// $array that contain records and id is what we want to fetch a
$ids = array_column($array, 'id');
0
ответ дан 24 November 2019 в 02:56
поделиться
function extract_ids($cats){
    $res = array();
    foreach($cats as $k=>$v) {
        $res[]= $v->id;
    }
    return $res
}

и использовать его в одной строке :

$ids = extract_ids($cats);
4
ответ дан 24 November 2019 в 02:56
поделиться

КОД

<?php

# setup test array.
$cats = array();
$cats[] = (object) array('id' => 15);
$cats[] = (object) array('id' => 18);
$cats[] = (object) array('id' => 23);

function extract_ids($array = array())
{
    $ids = array();
    foreach ($array as $object) {
        $ids[] = $object->id;
    }
    return $ids;
}

$cat_ids = extract_ids($cats);
var_dump($cats);
var_dump($cat_ids);

?>

ВЫХОД

# var_dump($cats);
array(3) {
  [0]=>
  object(stdClass)#1 (1) {
    ["id"]=>
    int(15)
  }
  [1]=>
  object(stdClass)#2 (1) {
    ["id"]=>
    int(18)
  }
  [2]=>
  object(stdClass)#3 (1) {
    ["id"]=>
    int(23)
  }
}

# var_dump($cat_ids);
array(3) {
  [0]=>
  int(15)
  [1]=>
  int(18)
  [2]=>
  int(23)
}

Я знаю, что здесь используется цикл, но это самый простой способ сделать это! И при использовании функции он все равно попадает в одну строку.

3
ответ дан 24 November 2019 в 02:56
поделиться

Встроенные циклы в PHP быстрее, чем интерпретируемые циклы, поэтому на самом деле имеет смысл сделать этот однострочный:

$result = array();
array_walk($cats, create_function('$value, $key, &$result', '$result[] = $value->id;'), $result)
3
ответ дан 24 November 2019 в 02:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: