Как перебрать массив и получить ключевые значения в PHP - PullRequest
2 голосов
/ 09 декабря 2011

Я пытаюсь выяснить, как перебирать массив, который является декодированной строкой json.Я хотел бы создать переменные для имени, фамилии и т. Д., А затем вывести их в отдельные строки таблицы.Вот пример массива.Большинство результатов будет иметь несколько записей.Любые предложения будут оценены:

Array ( [results] => Array ( [@count] => 1 [@pageNumber] => 1 [@totalRecords] => 1 [@additionalPages] => 0 [person] => Array ( [0] => Array ( [@array] => true [@id] => 38903211 [@uri] => https://api-name-removed.com/People/38903211 [@imageURI] => [@oldID] => 38614423 [@iCode] => fwVVyUOWEg3DOjIfg== [@householdID] => 23902641 [@oldHouseholdID] => 23740508 [title] => [salutation] => [prefix] => [firstName] => Mandy [lastName] => Ford [suffix] => [middleName] => [goesByName] => [formerName] => [gender] => Female [dateOfBirth] => 1965-02-11T00:00:00 [maritalStatus] => [householdMemberType] => Array ( [@id] => 1 [@uri] => https://api-name-removed.com/People/HouseholdMemberTypes/1 [name] => Head ) [isAuthorized] => true [status] => Array ( [@id] => 26523 [@uri] => https://api-name-removed.com/People/Statuses/26523 [name] => Prospect [comment] => [date] => 2010-09-07T00:00:00 [subStatus] => Array ( [@id] => [@uri] => [name] => ) ) [occupation] => Array ( [@id] => [@uri] => [name] => [description] => ) [employer] => [school] => Array ( [@id] => [@uri] => [name] => ) [denomination] => Array ( [@id] => [@uri] => [name] => ) [formerChurch] => [barCode] => 20001881 [memberEnvelopeCode] => [defaultTagComment] => [weblink] => Array ( [userID] => [passwordHint] => [passwordAnswer] => ) [solicit] => [thank] => true [firstRecord] => 2008-11-24T14:52:23 [attributes] => [addresses] => [communications] => Array ( [communication] => Array ( [0] => Array ( [@array] => true [@id] => 40826651 [@uri] => https://api-name-removed.com/Communications/40826651 [household] => Array ( [@id] => 23902641 [@uri] => https://api-name-removed.com/Households/23902641 ) [person] => Array ( [@id] => [@uri] => ) [communicationType] => Array ( [@id] => 4 [@uri] => https://api-name-removed.com/Communications/CommunicationTypes/4 [name] => Email ) [communicationGeneralType] => Email [communicationValue] => mford@email.com [searchCommunicationValue] => mford@adventurechristian.org [listed] => true [communicationComment] => [createdDate] => 2011-11-14T17:10:13 [lastUpdatedDate] => 2008-11-24T14:52:23 ) ) ) [lastMatchDate] => [createdDate] => 2011-11-14T17:10:03 [lastUpdatedDate] => 2011-05-09T11:43:59 ) ) ) )

1 Ответ

5 голосов
/ 09 декабря 2011

вы можете использовать foreach, тогда просто используйте переменные переменные :

foreach($array as $keyName => $value) {
    //in here you have the key in $keyName and the value in $value
    $$keyName = $value;
}

РЕДАКТИРОВАТЬ: не уверены на 100%, что вы хотите с 'массивом' и 'результаты, но я думаю, что проблема заключается в том, что массивы являются дочерними по отношению к другим массивам, вы можете изменить код, чтобы проверить, является ли значение массивом, например, так:

// 1. flatten out the array to contain only single values (no arrays)

do {
    $containedArrayValue = false;
    foreach($array as $key => $value) {
        if(is_array($value)) {
            $array = array_merge($array,$value);
            $containedArrayValue = true;
        }
        unset($array[$key]);
    }

} while($containedArrayValue);

// 2. run the code above to get variables for each one
foreach($array as $keyName => $value) 
    $$keyName = $value;

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

ВТОРОЕ РЕДАКТИРОВАНИЕ: Я оставлю код выше, потому что, хотя это был не тот результат, которым вы былипоиск этого может помочь кому-то еще позже.Ваша структура данных - это массив, в котором каждое значение является либо строкой, либо числом, либо другим массивом.Каждый из этих массивов одинаков, поэтому вы можете иметь много слоев глубиной (7 в этом примере).Слой, о котором вы заботитесь, был бы в $ array [results] [person], если бы вся эта переменная хранилась в $ array;Это массив массивов 'people', поэтому первый человек будет в $ array [results] [person] [0], второй будет в $ array [results] [person] [1] и т. Д. Внутри каждого человека, которого выможно получить данные, которые вы хотите, как

$firstName = $array[results][person][0][firstName];
$lastName  = $array[results][person][0][lastName]; 
$email     = $array[results][person][0][email];

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

foreach($array[results][person] as $personNum => $personData) {
    $firstNames[] = $personData[firstName];
    $lastNames[]  = $personData[lastName];
    $emails[]     = $personData[email];
}

, и теперь у вас есть данные, которые вы хотите получить в этих трех массивах.Пустые скобки - это просто сокращение для следующего пустого элемента массива, поэтому в цикле я просто строю эти массивы член за членом.Если вы хотите получить что-то более сложное, например подсказку о пароле, вы можете сделать это, выполнив $ personData [weblink] [passwordHint] внутри цикла.Для получения дополнительной информации ознакомьтесь с синтаксисом foreach и многомерных массивов .

...