Как я могу заказать My Object Array? [Дубликат]

Вы можете получить один элемент, запустив

document.querySelector('.myElement').style.size = '100px';

, но он будет работать для первого элемента с классом .myElement.

Если вы хотите применить это для всех элементы с классом я предлагаю вам использовать

document.querySelectorAll('.myElement').forEach(function(element) {
    element.style.size = '100px';
});
4
задан xtoffer 21 March 2012 в 18:27
поделиться

4 ответа

Что-то вроде следующего должно начать:

<?php

function sortDate($a, $b) {
    return strtotime($a['date']) - strtotime($b['date']);
}

$input = array('info' => array(array('id' => 2, 'date' => '2019-04-11'), array('id' => 1, 'date' => '2010-05-15')));

usort($input['info'], 'sortDate');
print_r($input);
0
ответ дан Andreas Wong 23 August 2018 в 02:13
поделиться
  • 1
    Спасибо за ваши отзывы andreas, я очень ценю это – xtoffer 21 March 2012 в 19:18

Используйте uasort для сортировки массива с пользовательской функцией и strtotime для анализа даты на метку времени.

$json = '
    {"info":[
        {"id":1, "title":"original title", "name":"john doe", "date":"2010-05-15"}, 
        {"id":2, "title":"another title", "name":"foo bar", "date":"2009-04-11"}
        ]
    }';

$arr = json_decode($json)->info;
uasort($arr, function($item1, $item2){
    return strtotime($item1->date) > strtotime($item2->date);
});

Выведет

Array
(
    [1] => stdClass Object
        (
            [id] => 2
            [title] => another title
            [name] => foo bar
            [date] => 2009-04-11
        )

    [0] => stdClass Object
        (
            [id] => 1
            [title] => original title
            [name] => john doe
            [date] => 2010-05-15
        )

)
0
ответ дан cypher 23 August 2018 в 02:13
поделиться
  • 1
    Вам также не нужно uasort, потому что клавиши являются числовыми, и упорядочение их, поддерживая числовые клавиши, может быть невероятно запутанным (в вашем выходе 0 появляется после 1). – Ry-♦ 21 March 2012 в 18:42
  • 2
    Да, это так и происходит, потому что я хочу этого. Я не хочу изменять массив больше, чем это необходимо без причины. Что, если ключ действительно важен? – cypher 21 March 2012 в 18:46
  • 3
    Готов поспорить, что вам 50 долларов, что OP не хочет, чтобы элемент 1 пришел до элемента 0 в массиве, тем более, что он не был ассоциативным для начала;) – Ry-♦ 21 March 2012 в 18:49
  • 4
    Вы можете поспорить со мной, что бы вы ни пожелали, я не меняю индексы только потому, что думаю, что могу. – cypher 21 March 2012 в 18:51
  • 5
    Sigh Я не думаю, что вы понимаете, насколько смешно иметь массив в этом порядке с этими ключами. Но что угодно. – Ry-♦ 21 March 2012 в 18:52

Сначала вы должны преобразовать дату в сортируемый формат. Я думаю, что strtotime() выполняет эту работу. После этого вы можете выводить все с помощью strftime().

0
ответ дан Frank van Wijk 23 August 2018 в 02:13
поделиться

Вы можете использовать usort и пользовательскую функцию сравнения:

$data = '{"info":[{"id":1, "title":"original title", "name":"john doe", "date":"2010-05-15"}, {"id":2, "title":"another title", "name":"foo bar", "date":"2009-04-11"}]}';

$info = json_decode($data, true)['info'];

usort($info, function ($a, $b) {
    return $a['date'] <=> $b['date'];
});

<=> работает здесь, потому что сравнение строк также является сопоставлением даты, когда ваши даты форматируются как YYYY-MM-DD.

Затем, чтобы показать значение года для записи, вы можете проанализировать дату в DateTime и переформатировать ее:

$date = DateTime::createFromFormat('Y-m-d', $item['date']);
$year = $date->format('Y');

Вот демонстрация.

8
ответ дан Ry- 23 August 2018 в 02:13
поделиться
  • 1
    Большое вам спасибо за это, теперь он работает! Спасибо за ваши усилия, чтобы объяснить это! я очень ценю это – xtoffer 21 March 2012 в 19:15
  • 2
    @xtoffer Вы должны принять ответ как правильный, чтобы не просто оценить их усилия, чтобы помочь вам, но вы также можете помочь кому-то вроде меня, у кого есть такая же проблема, как вы, и я пытаюсь выяснить, какой ответ отсюда правильный один! Заранее спасибо! – Laci 10 May 2014 в 08:55
  • 3
    Спасибо за ответ - слишком плохо, это не отмечено как решено .. – kater louis 20 May 2018 в 17:56
  • 4
    Примечание. Начиная с PHP 5.2.2 объекты DateTime можно сравнивать с помощью операторов сравнения, поэтому вы должны просто иметь возможность return ($dA > $dB) – joshuahedlund 9 July 2018 в 15:25
  • 5
    @joshuahedlund: usort не ожидает логического возврата, но вы правы, не имеет смысла сравнивать только год, даже если вы показываете только год. – Ry-♦ 9 July 2018 в 15:41
Другие вопросы по тегам:

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