Я хочу найти строку в ассоциативном массиве - PullRequest
0 голосов
/ 05 февраля 2019
Array
(
    [0] => stdClass Object
        (
            [goal_status_name] => Not Started
        )

    [1] => stdClass Object
        (
            [goal_status_name] => Completed
        )
    [2] => stdClass Object
        (
            [goal_status_name] => Pending
        )
)

Я хочу найти строковое значение в массиве выше, если существует, чем счет 1. Если не существует, чем счет 0, используя код php.

$string = "Not Started";
$count = 0;
if(in_array($string, $data)){
  $count++;
  $val = $count; 
}

Ответы [ 3 ]

0 голосов
/ 05 февраля 2019

У вас нет ассоциативного массива.У вас есть индексированный массив с объектами.

Вы можете сделать это с помощью простого цикла foreach

$string = "Not Started";
$count  = 0;

foreach ($data as $obj) {
    if ($obj->goal_status_name === $string) {
        $count++;
    }
}

Теперь, после цикла, чтобы увидеть, содержит ли хотя бы один объект эту строку, выможете сделать:

if ($count > 0) {
    echo 'Match found';
}

Если вы хотите знать, если все объекты, содержащие эту строку, вы можете сделать:

if ($count > 0 && $count == count($data)) {
    echo 'All objects match';
}

$count будет просто содержатьколичество совпадений.

0 голосов
/ 05 февраля 2019

Просто чтобы добавить комментарий в качестве ответа, в PHP 7 вы можете использовать array_column() с объектами в качестве ввода, поэтому просто используйте ...

$string = "Not Started";
$count = 0;
if(in_array($string, array_column($data,"goal_status_name"))){
    $count++;
    $val = $count;
}
0 голосов
/ 05 февраля 2019

вы можете сделать что-то вроде этого, если это массив объектов:

$count = 0;
foreach ($objects as $object) {
    if($object->goal_status_name == 'Not Started'){
        $count++;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...