찾다

 >  Q&A  >  본문

PHP의 배열: 새 항목을 추가할 때 놀라운 결과

그래서 저는 Instaloader Python 라이브러리에서 수집한 이미지를 수집하여 제 웹사이트의 갤러리에 넣을 수 있는 코드를 작성하고 있습니다. 아무 문제 없이 이를 수집하고 표시했지만 이제 각 게시물에 대한 헤더를 구현하기 시작했고 문제가 발생했습니다.

라이브러리가 사진을 다운로드하는 방식은 컬렉션에 사진이 두 개 이상 있는 경우 컬렉션 내 이미지 위치를 기준으로 게시물에 _1, _2 등의 접미사를 추가하고 다음과 같이 .txt 파일을 제공하는 것입니다. 제목.

수집용 샘플 폴더 내용:

으아악

단일 게시물이 잘 작동합니다 예:

으아악

주 코드 블록:

으아악

$arrayKey는 일반 단일 게시물에 컬렉션이 있는 경우 false를 반환합니다.

나는 이것이 (date)_(collectionposition).jpg를 읽기 전에 (date).txt를 읽는다고 가정하기 때문에 스크립트가 이러한 파일을 읽는 파일 순서와 관련이 있다고 믿습니다.

배열 항목이 이미 생성된 경우 일반적으로 헤더가 배열 데이터에 추가됩니다. 그렇지 않은 경우(예: _1, _2 등이 있는 경우) 배열은 아무것도 업데이트하지 않으며 오류도 발생하지 않습니다.

편집: 추가 문제 해결에서는 "날짜" 값을 기반으로 배열 키를 업데이트/확인하는 방식이 잘못되었음을 알 수 있습니다. 이러한 작업을 처리하는 올바른 방법을 찾을 수 있기를 바랍니다

이 작업이 예상대로 이루어지도록 수정할 수 있는 부분에 대한 안내를 주시면 감사하겠습니다!

P粉893457026P粉893457026236일 전507

모든 응답(1)나는 대답할 것이다

  • P粉739942405

    P粉7399424052024-04-01 00:29:12

    먼저 코드를 공부해 보세요. 당신이 언급한 질문, 즉. 다음 줄:

    으아악

    ...Return false,因为处理 .txt 文件时尚未创建带有日期的 $array 条目。 (使用 array_push 배열 멤버를 생성하는 논리는 코드 아래에 있습니다. )

    아직 정의되지 않은 if/else논리의 관련 부분으로 계속 이동하기 위한 간단한 수정: 으아악

    즉,

    이면 기존 배열 멤버에 값을 계속 추가합니다. 그렇지 않으면 배열 멤버를 만듭니다. $arrayKey不是false

    또한 이미지를 처리할 때 처음으로 경고가 발생하는 문제가 있습니다.

    으아악

    이 작업은

    정의되지 않은 배열 키 'collection-size' 로 인해 실패합니다. 키가 아직 존재하지 않기 때문입니다. 예를 들어 배열 키에 대해 작업을 시도하기 전에 null 병합 연산자를 사용하여 "기본 0"을 설정하는 문제를 해결하세요. 으아악 collection-size이 댓글은 버그를 수정하지만 txt 또는 jpg의 첫 번째 인스턴스에서 "항목 생성"을 분리하는 것이 더 나을 것입니다. txt/jpg 특정 논리를 수행하기 전에 예상 키가 있는 빈 배열 멤버를 사용하십시오. 저는

    만 사용하겠습니다. 예를 들어 날짜를 추출한 후 다음을 사용합니다.

    으아악 $date 本身作为分组,这样您也可以摆脱 array_search그런 다음 일치하도록 나머지 코드를 수정하세요.

    코드는 파일을 읽는 순서에 의존해서는 안 됩니다.

    주문이 보장되지 않습니다. 그렇지 않으면 항상 파일 목록을 먼저 일반 배열로 읽은 다음 정렬하고 특정 논리를 적용할 때 다시 반복할 수 있습니다. 단순화된 코드

    실제 필요한 코드 양은 보유한 코드 양보다 훨씬 적습니다. 여기서는 당신을 위해 다듬었습니다. 귀하의 파일이 없으므로 다음은 더미 데이터입니다.

    으아악

    또한

    파일을 배열(= 파일 경로 목록)에 넣을 수도 있습니다.

    으아악 glob그런 다음 다음과 같이 반복합니다.

    으아악

    얼마나 줄어드는지 확인하세요. 무슨 일이에요?

    우리는
      를 사용합니다!
    • $date 作为数组的分组索引。不再有 array_search날짜별 기본 항목을 초기화합니다. 추가 검사나 조건이 필요하지 않습니다!
    • 파일 이름의
    • 등 "컬렉션 크기"는 무시합니다. 각 JPG에 +1만 추가하면 됩니다.
    • _3우리는
    • 를 사용합니다.
    • nglobfile_get_contents 而不是 readdirfopen파일 순서는 상관없습니다. (자유롭게 테스트하고
    • !)
    • shuffle($files)
    • 결과:
    으아악

    회신하다
    0
  • 취소회신하다